Python+Selenium的Windows配置
安装python
- python下载地址: https://www.python.org
- python环境变量:
通过电脑->属性->高级系统设置->环境变量添加至Path环境变量 (不同路径之间是分号)
D:\software\python3.6.2
D:\software\python3.6.2\Scripts
或cmd:path=%path%;D:\software\python3.6.2
path=%path%;D:\software\python3.6.2\Scripts
- 测试python是否安装成功:
cmd:python
安装selenium
cmd: pip install selenium==3.7.0
(==指定安装版本)pip uninstall selenium
(卸载安装的包)
安装浏览器驱动
- chrome驱动下载地址: http://chromedriver.storage.googleapis.com/index.html
- 将chromedriver放到D:\software\python3.6.2\Scripts下
- 将chrome所在位置添加至环境变量
- 测试能否打开网页:浏览器驱动,浏览器版本和selenium版本要对应
1
2
3
4
5
6from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_argument('headless') #不显示浏览器窗口
browser = webdriver.Chrome(chrome_options=option)
browser.get(url) #打开网页
browser.quit() #关闭浏览器
元素定位
基本元素定位方法
- 通过id定位:
find_element_by_id()
- 通过类名定位:
find_element_by_class_name()
- 通过标签名定位:
find_element_by_tag_name()
- 通过name定位:
find_element_by_name()
- 通过文本定位:
find_element_by_link_text()
- 通过部分文本定位:
find_element_by_partial_link_text()
- 通过路径定位:
find_element_by_xpath()
- 通过css定位:
find_element_by_css_selector()
基本元素定位方法的复数形式
- 将find_element_by_x()变为find_elements_by_x()
- find_element只能定位到匹配的第一个元素,find_elements能定位匹配的所有元素并返回一个列表,可以通过列表下标选择需要定位的元素
js定位方法
- 通过id定位:
document.getElementById()
- 通过标签名定位:
document.getElementByTagName()
- 通过类名定位:
document.getElementByClassName()
- 通过name定位:
document.getElementByName()
- 其复数形式也是将Element变为Elements
xpath定位
- 属性定位 (@后接属性):
find_element_by_xpath('//*[@id="x"]')
- 文本定位 (text):
find_element_by_xpath('//*[text()="x"]')
- 相对路径定位 (//表示相对路径):
find_element_by_xpath('//*[@id="x"]//tr[2]')
- 绝对路径定位:
find_element_by_xpath('//*[@id="x"]/div/table/tbody/tr[2]')
- 父节点定位子节点 (child):
find_element_by_xpath('//*[@id="x"]/child::div')
- 子节点定位父节点 (parent):
find_element_by_xpath('//*[@id="x"]/../..')
find_element_by_xpath('//*[@id="x"]/parent::*/parent::div')
- 兄节点定位弟节点 (following-sibling):
find_element_by_xpath('//*[@id="x"]/following-sibling::div')
- 弟节点定位兄节点 (preceding-sibling):
find_element_by_xpath('//*[@id="x"]/preceding-sibling::div')
- 组合定位 (and):
find_element_by_xpath('//div[@id="x" and @name="x"]')
- 模糊匹配定位 (contains,starts-with):
find_element_by_xpath('//*[contains(@id,"x")]')
(*表示全部标签,包含)find_element_by_xpath('//*[starts-with(@id,"x")]')
(以什么开头)find_element_by_xpath('//*[contains(text(),"x")]')
find_element_by_xpath('//*[starts-with(text(),"x")]')
其他元素定位方法
- 层级定位:
find_element_by_id("table").find_elements_by_tag_name('tr')
- 执行js脚本修改属性以定位:
execute_script("document.getElementById("x").style.display='block';")
定位元素的鼠标事件
- 单击:
click()
- 鼠标移到某元素:
ActionChains(driver).move_to_element(c).perform()
获取定位元素的信息
- 获取文本:
.text
- 获取属性值:
.get_attribute('href')