1.常用方法
driver = webdriver.chrome()
driver.get("http://www.baidu.com/")
driver.get_cookies()# 获取当前页面Cookie driver.page_source# 打印网页渲染后的源代码 driver.save_screenshot("长城.png")#截图 driver.get_screenshot_as_file(r'E\a.png')#截图
driver.current_url driver.title
driver.set_window_size(800,480) driver.maximize_window()
driver.forward() driver.back()
driver.refresh() driver.close() driver.quit()
driver.find_element_by_id('kw').clear() driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('kw').submit() driver.find_element_by_id('su').click()
driver.find_element_by_id('kw').size #返回元素输入框窗口的尺寸 driver.find_element_by_id('cp').text #返回元素的文本 driver.find_element_by_id('kw').get_attribute('type') #返回元素的属性值 driver.find_element_by_id('kw').is_displayed() #返回元素是否可见的布尔值2.鼠标事件
from selenium.webdriver import ActionChains # 鼠标移动到 ac 位置 ac = driver.find_element_by_xpath('element') ActionChains(driver).move_to_element(ac).perform() # 在 ac 位置单击 ac = driver.find_element_by_xpath("elementA") ActionChains(driver).move_to_element(ac).click(ac).perform() # 在 ac 位置双击 ac = driver.find_element_by_xpath("elementB") ActionChains(driver).move_to_element(ac).double_click(ac).perform() # 在 ac 位置右击 ac = driver.find_element_by_xpath("elementC") ActionChains(driver).move_to_element(ac).context_click(ac).perform() # 在 ac 位置左键单击hold住 ac = driver.find_element_by_xpath('elementF') ActionChains(driver).move_to_element(ac).click_and_hold(ac).perform() # 将 ac1 拖拽到 ac2 位置 ac1 = driver.find_element_by_xpath('elementD') ac2 = driver.find_element_by_xpath('elementE') ActionChains(driver).drag_and_drop(ac1, ac2).perform()
3.键盘事件
from selenium.webdriver.common.keys import Keys # ctrl+a 全选输入框内容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') # ctrl+x 剪切输入框内容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') # 输入框重新输入内容 driver.find_element_by_id("kw").send_keys("itcast") # 模拟Enter回车键 driver.find_element_by_id("su").send_keys(Keys.ENTER)
4.页面验证信息
driver.current_url driver.title driver.find_element_by_id('cp').text try:元素 except:
5.页面等待
强制等待:time.sleep()
隐式等待:
driver.implicitly_wait(10)显示等待:
from selenium import webdriver from selenium.webdriver.common.by import By # WebDriverWait 库,负责循环等待 from selenium.webdriver.support.ui import WebDriverWait # expected_conditions 类,负责条件出发 from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://www.xxxxx.com/loading") try: # 页面一直循环,直到 id="myDynamicElement" 出现 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit()6.表单frame与窗口句柄切换
driver.switch_to.frame('iframe2')
driver.get("http://bj.ganji.com/") sleep(6) h = driver.current_window_handle driver.find_element_by_link_text('北京招聘').click() sleep(6) all_h = driver.window_handles for i in all_h: if i != h: driver.switch_to.window(i) print(driver.current_window_handle) print(driver.title) sleep(2) driver.close() sleep(1) driver.switch_to.window(h) a=driver.find_element_by_xpath('//*[@id="rememzhiwei"]/div/span/a[1]').text7.对话框处理
driver.get("http://www.maiziedu.com/") sleep(15) a=driver.current_window_handle print(a) #关闭弹框 driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[3]/div/div').click() #关闭对话框 driver.switch_to.frame('MEIQIA-IFRAME') b=driver.current_window_handle print(b) driver.find_element_by_xpath('//*[@id="btnHideChat"]/i').click()
8.alert警告框处理
#接受提示框 driver.switch_to_alert().accept() driver.switch_to_alert().text driver.switch_to_alert().dismiss() driver.switch_to_alert().send_keys()
9.上传文件
driver.find_element_by_name('file').send_keys(r'E\a.txt') #定位上传按钮,添加本地文件10.滚动条调用js
from selenium import webdriver import time driver = webdriver.Chrome() driver.set_window_size(800,800) driver.implicitly_wait(10) driver.get('https://www.baidu.com/') driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click() time.sleep(5) driver.execute_script('window.scrollTo(100,450);') time.sleep(5)
import time from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(6) driver.get("https://tieba.baidu.com/index.html") time.sleep(1) target_elem = driver.find_element_by_link_text("地区") driver.execute_script("return arguments[0].scrollIntoView();", target_elem) # 用目标元素参考去拖动 # driver.execute_script("scroll(0,2400)") # 这个是第二种方法,比较粗劣,大概的拖动
11.html5视频播放
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(5) driver.get('http://videojs.com/') video = driver.find_element_by_xpath('//*[@id="preview-player_html5_api"]') #返回播放文件地址 url = driver.execute_script("return arguments[0].currentSrc;",video) print(url) #播放视频 driver.execute_script("return arguments[0].play()",video) #播放15秒钟 sleep(15) #暂停视频 driver.execute_script("return arguments[0].pause()",video)12.日志捕捉
import logging from selenium import webdriver logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') #format参数可以不用 logger = logging.getLogger('baidu_search') driver = webdriver.Chrome() logger.info("打开谷歌浏览器") driver.maximize_window() logger.info("浏览器窗口最大化") driver.implicitly_wait(10) logger.info("隐式等待10秒") driver.get('https://www.baidu.com/') logger.info("打开百度首页") driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click()
import time import os class Loginfo(object): def __init__(self, mode='w'): #打开文件 path = os.path.dirname(os.path.abspath('.')) + '/mokuaihua/logs/' # 日志存储路径 filename = time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime())+'.txt' self.log = open(path+filename,mode,encoding='utf-8') def log_write(self,msg): self.log.write(msg) def log_close(self): self.log.close() if __name__ == '__main__': log = Loginfo() log.log_write('test 测试') log.log_close()