1、验证码的处理
1、概述&绕过验证码的方案
很多的网站都在登录页面加入了识别文字,识别图片,拖动拼图的验证码方式来防止爬虫、恶意注册 等,如果是做自动化,需要绕过验证码才能进入下一步操作,那么有4种方案可以解决我们遇到的问题。
2、绕过验证码的方案
1、测试环境去除验证码
可以和开发进行沟通,但是仅限于测试环境哦
2、万能验证码 (推荐)
3、通过添加cookie绕过登录
cookie是一门客户端技术,一般是由服务器生成返回给浏览器客户端来保存的,并且cookie是以 键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间...
如下便是一个cookie存储的位置,包含过期时间等:
1、cookie有很多使用场景,在项目中比较常见的有:
1. 登录记住用户名
2. 记录用户浏览记录
2、Cookie种类
1、会话cookie:保存在内存中,浏览器关闭就清除
2、持久cookie:保存在硬盘中,失效时间到之后就会清除
3、添加cookie解决验证码思路
在登录某个网站,如果勾选【自动登录】,当下次再访问该网站时就自动处于登录状态。这个功能其实 就是将用户信息保存在浏览器的cookie中,当再次访问网站时,浏览器直接使用本地保存的cookie用户 信息进行登录。
使用这个原理,以我们在代码中也可以将用户信息添加到cookie中,再刷新浏览器即可,示例代码:
Cookie cookie = new Cookie("XXX","XXXXXX");
driver.manage().addCookie(cookie);
4、实战
如下2个例子是使用cookie登录成功的案例
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
# driver.add_cookie({"name":"BAIDUID_BFESS","value":"3B4FF41DB8055719BCC9FC2F05286F2C:SL=0:NR=10:FG=1"})
# 以下2个都可以登录,都已做修改,需要更换value值为自己的哦
driver.add_cookie({"name":"BDUSS","value":"lqNHpnQXp5T0dNOENIZjFZUmxYMzlDOVhqRHh2QXVKNk1aRDM1VjFrR0xFeDFsRVFBQUFBJCQAAAAAAAAAAAEAAADI2G41wO7o97e8Y2NjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuG9WSLh——————————————————————"})
# driver.add_cookie({"name":"BDUSS_BFESS","value":"lqNHpnQXp5T0dNOENIZjFZUmxYMzlDOVhqRHh2QXVKNk1aRDM1VjFrR0xFeDFsRVFBQUFBJCQAAAAAAAAAAAEAAADI2G41wO7o97e8Y2NjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-------WSLhvVkd2"})
sleep(3)
driver.refresh()
sleep(3)
driver.close()
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.ketou--pai.com/#/XXXXe")
# 以下可以
driver.add_cookie({"name":"token","value":"239d9d96328871ab2a5190d9e3f38fae042a3fa6aec691a4319b9------------ed30"})
sleep(5)
driver.refresh()
sleep(3)
driver.close()
扩展知识:
1、cookie失效的条件
1、手动退出登录,那么当前的cookie就会失效
2、cookie已经超过有效期
2、为什么会话cookie不能作为登录的鉴权代替用密码和密码完成登录操作
因为会话cookie生命周期存在与一次会话中(浏览器打开网页->关闭),只能作用于当前的浏览器
4、通过OCR识别技术-识别图片的里面关键信息(文字/数字)
参考:http://testingpai.com/article/1677826568289
3、一些扩展知识
2、JavaScript操作(在Python中执行JavaScript语句)
通过在Selenium WebDriver中执行JavaScript可以大大增强Selenium的能力,Selenium对于一些特殊 场景的元素操作无能为力,我们可以借助JavaScript来处理,比如点击、修改元素属性、滚动页面/内嵌 的滚动条等
1、使用JavaScript的场景&使用模板
1、浏览器页面的滚动条(或者懒加载)
懒加载:根据进度条的下拉,再去加载此刻下拉位置的页面数据
整体页面的滚动条移动写法:
document.documentElement.scrollTop=200 //滑动到指定位置,0代表顶端
document.documentElement.scrollHeight //获取页面的滚动高度
备注:以上的语句需要在console中执行才会生效哦,如下:
2、页面内嵌的滚动条
页面内嵌的滚动条移动需要2步,如下:
1、先去定位内嵌滚动条元素
2、再使用scrollTop进行滚动
实战演练:
2、在Python代码中调用JavaScript
1、方式一:不传参
模板语句如下:
driver.execute_script("...");
2、方式二:传参
模板语句如下:
element = driver.find_element(By.ID,"XX")
driver.execute_script("arguments[0]...",element)