selenium Web的自动化测试工具
安装selenium
-
pip install selenium
-
导入:
from selenium import webdriver
-
实例化 :
driver = webdriver.Chrome()
driver.get('www.baidu.com')
语法
-
返回html字符串,浏览器的elements内容 :
driver.page_source
-
设置浏览器大小 :
driver.set_window_size(1920, 1080)
-
截屏save_screenshot() :
driver.save_screenshot('./baidu.jpg')
-
返回当前的url地址
driver.current_url
-
关闭浏览器 quit() :
driver.quit()
-
关闭当前页面 close() :
driver.close()
-
点击 click() :
river.find_element_by_id('su').click()
-
定位
- 根据属性定位或根据xpath定位
find_element_by_id driver.find_elements_by_xpath() driver.find_element_by_xpath() driver.find_elements_by_link_text() driver.find_elements_by_partial_link_text() driver.find_elements_by_tag_name() ......
-
输入 send_keys() :
driver.find_element_by_id('kw').send_keys()
-
获取cookie get_cookies() :
cookie = {i['name']:i["value"] for i in driver.get_cookies()}
selenium 使用注意点
-
获取文本或属性
- 先定位元素,然后调用
.text()
或者.get_attribute()
方法来获取
- 先定位元素,然后调用
-
selenium 获取的页面是 elements 的内容
-
find_element
和find_elements
的区别find_element
返回的是一个 element 对象,如果没有会报错find_elements
返回的是一个列表,没有就是空列表- 在判断是否有下一页的时候,使用
find_elements
根据结果的列表长度来判断
-
如果页面中含有
iframe、frame
,需要先调用driver.switch_to.frame
的
方法切换到frame中才能够能定位元素,否则无法定位到 -
selenium 请求第一页的时候会等待页面加载完之后获取数据,但在翻页之后,会直接
获取数据,此时可能会报错,因为数据还没有加载出来,需要使用time.sleep()
来控制
验证码识别
-
url 不变,验证码不变
- 请求验证码地址,获取响应,识别
-
url 不变,验证码会变
-
思路:对方服务器返回验证码的时候,会和每个用户信息和验证码进行一个对应,
之后再在发送post请求的时候,会对比post请求中发的验证码和当前用户真正存储
在服务器端的验证码是否相同。 -
解决思路 :
- 实例化session
- 使用session请求登录页面,获取验证码的地址
- 使用session请求验证码,识别
- 使用session发送post请求
-
-
使用 selenium 登录,遇到验证码
-
url 不变,验证码不变
- 同上
-
url 不变,验证码会变
- selenium 请求登录页面,同时拿到验证码的地址
- 获取登录页面中 driver 中的 cookie ,交给 requests 模块发送验证码请求, 识别
- 输入验证码,登录
-