本文将介绍Selenium如下操作内容
鼠标与键盘操作
文件上传下载
Cookie设置
窗口操作
元素等待
checkbox元素操作
滚动条操作
鼠标与键盘操作 鼠标操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom time import sleepdriver=webdriver.Firefox() driver.get("http://www.baidu.com" ) driver.maximize_window() driver.find_element_by_css_selector("#kw" ).send_keys("Python" ) element=driver.find_element_by_css_selector("#kw" ) sleep(3 ) ActionChains(driver).double_click(element).perform() sleep(2 ) ActionChains(driver).context_click(element).perform() sleep(3 ) above=driver.find_element_by_css_selector(".pf" ) ActionChains(driver).move_to_element(above).perform() sleep(4 ) driver.quit()
键盘操作 测试案例
在百度搜索关键词“Python”
然后将关键词复制或剪切到搜狗搜索框进行搜索
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom time import sleepdriver=webdriver.Firefox() driver.get("http://www.baidu.com" ) driver.find_element_by_css_selector("#kw" ).send_keys("Python" ) sleep(2 ) driver.find_element_by_css_selector("#kw" ).send_keys(Keys.CONTROL,'a' ) driver.find_element_by_css_selector("#kw" ).send_keys(Keys.CONTROL,'c' ) driver.find_element_by_css_selector("#kw" ).send_keys(Keys.CONTROL,'x' ) driver.get("http://www.sogou.com/" ) sleep(2 ) driver.find_element_by_css_selector(".sec-input" ).send_keys(Keys.CONTROL,'v' ) sleep(2 ) driver.find_element_by_css_selector("#stb" ).click() sleep(3 ) driver.quit()
还有一种特殊情况,如果出现元素不能聚焦的error: cannot focus element
可以执行如下代码:
1 2 3 4 5 action = ActionChains(self.driver) el=self.find_element(self.volume_button_high) action.move_to_element(el) action.send_keys(Keys.UP).perform()
注意:Mac端不能Ctrl+
和win环境不一样,需要使用COMMAND
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import time from selenium.webdriver.common.keys import Keys from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') time.sleep(3) driver.find_element(By.ID,'kw').send_keys('selenium') time.sleep(2) #Mac端不能使用CONTROL而是COMMAND driver.find_element(By.ID,'kw').send_keys(Keys.COMMAND,'a') time.sleep(2) driver.find_element(By.ID,'kw').send_keys(Keys.COMMAND,'x') time.sleep(2) driver.find_element(By.ID,'kw').send_keys(Keys.COMMAND,'v') time.sleep(2) driver.find_element(By.ID,'kw').send_keys(Keys.ENTER) time.sleep(2) driver.close()
常用键盘事件
Keys.BACK_SPACE:回退键(BackSpace)
Keys.TAB:制表键(Tab)
Keys.ENTER:回车键(Enter)
Keys.SHIFT:大小写转换键(Shift)
Keys.CONTROL:Control键(Ctrl)
Keys.ALT:ALT键(Alt)
Keys.ESCAPE:返回键(Esc)
Keys.SPACE:空格键(Space)
Keys.PAGE_UP:翻页键上(Page Up)
Keys.PAGE_DOWN:翻页键下(Page Down)
Keys.END:行尾键(End)
Keys.HOME:行首键(Home)
Keys.LEFT:方向键左(Left)
Keys.UP:方向键上(Up)
Keys.RIGHT:方向键右(Right)
Keys.DOWN:方向键下(Down)
Keys.INSERT:插入键(Insert)
DELETE:删除键(Delete)
NUMPAD0 ~ NUMPAD9:数字键1-9
F1 ~ F12:F1 - F12键
(Keys.CONTROL, ‘a’):组合键Control+a,全选
(Keys.CONTROL, ‘c’):组合键Control+c,复制
(Keys.CONTROL, ‘x’):组合键Control+x,剪切
(Keys.CONTROL, ‘v’):组合键Control+v,粘贴
文件上传下载 文件上传 1 2 3 4 5 6 7 8 from selenium import webdriverimport osdriver=webdriver.Firefox() file_path="file:///E:\\Desktop\\seleniumCode\\upfile.html" driver.get(file_path) driver.find_element_by_name("file" ).send_keys("E:\\Desktop\\seleniumCode\\open_gzb.py" )
文件下载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #下载文件 driver.get("http://jmeter.apache.org/download_jmeter.cgi") #浏览器下载属性设置 fp=webdriver.FirefoxProfile() fp.set_preference("browser.download.folderList",2) #设置浏览器下载路径,0表示默认,2表示指定路径 fp.set_preference("browser.download.manager.showWenStarting",True) #是否显示开始 fp.set_preference("browser.download.dir","E:\\Desktop") #指定下载保存的路径 driver=webdriver.Firefox(firefox_profile=fp) driver.get("http://jmeter.apache.org/download_jmeter.cgi") driver.find_element_by_partial_link_text("apache-jmeter-3.0.tgz").click()
Cookie设置 Cookie是储存在用户本地终端上的数据,实际上是一小段的文本信息,帮助 Web 站点保存有关访问者的信息,方便用户的访问。
案例: 查看和添加访问我要自学网的Cookie内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from selenium import webdriverdriver=webdriver.Firefox() driver.get("http://www.51zxw.net/" ) cookie=driver.get_cookies() print (cookie)print (cookie[0 ])driver.add_cookie({'name' :'51zxw' ,'value' :'www.51zxw.net' }) for cookie in driver.get_cookies(): print ("%s --- %s" %(cookie['name' ],cookie['value' ])) driver.quit()
窗口操作 窗口操作主要包括窗口的前进,后退、刷新、已经多个窗口操作。
打开页面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from selenium import webdriverimport timedriver=webdriver.Firefox() print ("打开拓维首页" )driver.get("http://www.talkweb.com.cn" ) print ("打开联系我们页面" )driver.get("http://www.talkweb.com.cn/contact/" ) time.sleep(3 )
页面访问前进/后退相关操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 print ("回退到首页" )driver.back() time.sleep(3 ) print ("前进到联系我们页面" )driver.forward() print ("刷新当前页面" )driver.refresh() print ("显示当前页面标题" )title=driver.title print (title)print ("显示当前URL" )now_url=driver.current_url print (now_url)
多窗口切换 案例:打开我要自学网Selenium课程主页,然后打开2-1课程详情页面,再回到课程主页打开3-1课程详情页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from selenium import webdriverfrom time import sleepdriver=webdriver.Firefox() driver.get("http://www.51zxw.net/list.aspx?cid=615" ) selenium_index=driver.current_window_handle sleep(2 ) driver.find_element_by_partial_link_text('2-1' ).click() sleep(4 ) driver.switch_to.window(selenium_index) sleep(3 ) driver.find_element_by_partial_link_text('3-1' ).click() sleep(3 ) driver.quit()
警告弹窗处理 案例:点击百度首页设置按钮,然后进入搜索设置页面,点击“保存设置”或“恢复默认”按钮,处理警告弹窗窗口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 from selenium import webdriverfrom time import sleepdriver=webdriver.Firefox() driver.get("http://www.baidu.com" ) driver.find_element_by_link_text('设置' ).click() sleep(2 ) driver.find_element_by_link_text('搜索设置' ).click() sleep(3 ) driver.find_element_by_link_text('保存设置' ).click() sleep(3 ) alert_window=driver.switch_to_alert() alert_window.accept() sleep(2 ) sleep(2 ) driver.quit()
元素等待 概念
显示等待是针对某一个元素进行相关等待判定;
隐式等待不针对某一个元素进行等待,全局元素等待。
相关模块
WebDriverWait 显示等待针对元素必用
expected_conditions 预期条件类(下面很多方法可以调用,用于显示等待)
NoSuchElementException 用于隐式等待抛出异常
By 用于元素定位
模块引用 1 2 3 4 5 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoSuchElementException
显示等待 案例 检测百度页面搜索按钮是否存在,存在就输入关键词“自学网 Selenium” 然后点击搜索
代码实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom time import sleepdriver=webdriver.Firefox() driver.get("http://www.baidu.com" ) driver.find_element_by_css_selector(".s_ipt" ).send_keys("自学网 Selenium" ) sleep(2 ) element=WebDriverWait(driver,5 ,0.5 ).until(EC.presence_of_element_located((By.ID,"su" ))) element.click() sleep(3 ) driver.quit()
隐式等待 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom time import sleep,ctimedriver=webdriver.Firefox() driver.get("http://www.baidu.com" ) sleep(2 ) driver.implicitly_wait(5 ) try : print (ctime()) driver.find_element_by_css_selector("#kw22" ).send_keys("Python" ) except NoSuchElementException as msg: print (msg) finally : print (ctime()) sleep(3 ) driver.quit()
isdisplay()方法来判断 1 2 3 4 5 6 7 8 9 10 11 12 print (ctime)for i in range (10 ): el=driver.find_element_by_id("kw23" ) try : if el.isdisplyed(): break except :pass else : print ("timeout" ) print (ctime())
checkbox元素操作 在实际项目过程中,会经常遇到页面的各自复选框,那么使用selenium该如何操作这些选项框呢?
Html页面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <html > <head > <title > </title > </head > <body > <p > <input type ="checkbox" name ="category" value ="今日话题" /> 今日话题 </p > <p > <input type ="checkbox" name ="category" value ="视觉焦点" /> 视觉焦点</p > <p > <input type ="checkbox" name ="category" value ="财经" /> 财经</p > <p > <input type ="checkbox" name ="category" value ="汽车" /> 汽车</p > <p > <input id ="btnOperate" type ="button" value ="选择" onclick ="static_num()" /> </p > </body > </html >
复选框定位
tag获取页面中所有的标签为input的元素 elements 多了一个“s” 这样可以获取一组元素
1 2 3 4 5 6 7 8 9 10 inputs=driver.find_elements_by_tag_name("input" ) print ("复选框的个数为" )print (len (inputs))
1 2 3 4 5 6 7 8 for i in inputs: if i.get_attribute("type" )=="checkbox" : i.click() time.sleep(1 ) driver.find_elements_by_xpath("//input[@type='checkbox']" ).pop(-1 ).click()
滚动条操作 selenium可以模拟人工上下滑动进度条的操作。
实践案例 案例1: 打开我要自学网页面,然后将滚动条拖到最底部,然后再拖到顶部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from selenium import webdriverfrom time import sleepdriver=webdriver.Firefox() driver.get("http://www.51zxw.net/" ) sleep(2 ) js="var action=document.documentElement.scrollTop=10000" driver.execute_script(js) sleep(2 ) js="var action=document.documentElement.scrollTop=0" driver.execute_script(js) sleep(3 ) driver.quit()
案例2: 分别打开我要自学网页面和百度页面,然后进行截图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from selenium import webdriverfrom time import sleepdriver=webdriver.Firefox() driver.get("http://www.51zxw.net" ) driver.get_screenshot_as_file(r"E:\Python_script\51zxw.jpg" ) driver.get("http://www.baidu.com" ) driver.get_screenshot_as_file(r"E:\Python_script\baidu.png" ) sleep(2 ) driver.quit()