Python+Selenium:初步使用Chrome谷歌浏览器
http://www.testclass.net/ 测试教程网,专业的selenium 学习网站。
一、配置selenium环境:
1、要自动化测试Chrome谷歌浏览器,首先要下载chromedriver驱动
驱动下载地址1:http://npm.taobao.org/mirrors/chromedriver/
驱动下载地址2:http://chromedriver.storage.googleapis.com/index.html
2、查看对应Chrome版本:
点击谷歌设置——》左上角设置旁边主菜单——》点击关于Chrome
3、下载Chrome谷歌浏览器对应版本的驱动: Chrome Drive 。
下面是谷歌浏览器与chromedriver的版本对应关系,供参考:
发布时间 chromedriver版本 支持的Chrome版本
2019-03-14 Driver v74 Chrome v74
2019-02-01 Driver v2.46 Chrome v71-73
2018-12-10 Driver v2.43 Chrome v70-72
2018-11-19 Driver v2.44 Chrome v69-71
2018-10-16 Driver v2.43 Chrome v69-71
2018-09-13 Driver v2.42 Chrome v68-70
2018-07-27 Driver v2.41 Chrome v67-69
2018-06-07 Driver v2.40 Chrome v66-68
2018-05-30 Driver v2.39 Chrome v66-68
2018-04-17 Driver v2.38 Chrome v65-67
2018-03-16 Driver v2.37 Chrome v64-66
2018-03-02 Driver v2.36 Chrome v63-65
2018-01-10 Driver v2.35 Chrome v62-64
注:支持chromeV74版本的driver版本号比较特别一点,不知道之后会不会回归以前正常的版本
4、下载后解压到:python文件夹目录下,
5、在终端安装
- pip install selenium
6、Selenium提供了以下方法
要定位页面中的单个元素方式:
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
要定位多个元素(这些方法将返回一个列表):
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
selenium对页面对象的定位器的方法:find_element和find_elements。(有上面两私有方法)。
# 用例方法:
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')
这些是By类可用的属性:
ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"
6、下面用pycharm 编写selenium webdriver 的一个简单脚本(以百度为给定网页):
import time from selenium import webdriver # 1、创建Chrome实例 。 driver = webdriver.Chrome() # 2、driver.get方法将定位在给定的URL的网页 。 driver.get("https://www.baidu.com/") # get接受url可以是如何网址,此处以百度为例 # 3、定位元素 。 # 3.1、用id定位输入框对象, driver.find_element_by_id("kw").send_keys("python") # 3.2、用id定位点击对象,用click()触发点击事件 driver.find_element_by_id('su').click() time.sleep(3) # 延迟3秒 # 4、退出访问的实例网站。 driver.quit()
7、元素的交互操作
对获取到的元素调用交互操作
import time from selenium import webdriver from selenium.webdriver import ActionChains # 自动化交互 from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys # 键盘按键操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素 # 1、创建Chrome实例 。 driver = webdriver.Chrome() # 2、driver.get方法将定位在给定的URL的网页 。 driver.get("https://www.taobao.com") # 网址淘宝 # 3、page_source——》页面源码 print(driver.page_source) # 4、输入框的实例 input=driver.find_element_by_id("q") # 4.1、发送搜索关键字 input.send_keys("iPhone") time.sleep(1) # 延迟1秒 input.clear() # 清除搜索关键字,做简单交互操作 input.send_keys("iPad") # 重新发送搜索关键字 # 5、点击对象实例化 button=driver.find_element_by_class_name("btn-search") button.click() time.sleep(3) # 延迟3秒 driver.quit()
8、交互动作
把动作附加到交互链中 ,下面是菜鸟网实现一个简单的拖拽动作 。
import time from selenium import webdriver from selenium.webdriver import ActionChains # 1、创建Chrome实例 。 driver = webdriver.Chrome() # 2、driver.get方法将定位在给定的URL的网页 。 driver.get("http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable") # 3、page_source——》页面源码 # print(driver.page_source) # 4、切换到目标元素所在的frame driver.switch_to.frame("iframeResult") # 5、确定拖拽目标的起点 source=driver.find_element_by_id("draggable") # 6、确定拖拽目标的终点 target=driver.find_element_by_id("droppable") # 7、形成动作链 actions = ActionChains(driver) actions.drag_and_drop(source,target) # 8、执行 actions.perform() time.sleep(3) driver.quit()
9、模拟浏览器的前进后退
# 模拟浏览器的前进后退
import time
from selenium import webdriver
# 1、创建Chrome实例 。
browser=webdriver.Chrome()# 2、准备页面链接
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('http://www.sina.com.cn/')# 3、后退函数back()
browser.back()
time.sleep(10)# 4、前函数forward()
browser.forward()
browser.close()