Python —— 验证码的处理&执行JavaScript语句

1、验证码的处理

1、概述&绕过验证码的方案

很多的网站都在登录页面加入了识别文字,识别图片,拖动拼图的验证码方式来防止爬虫、恶意注册 等,如果是做自动化,需要绕过验证码才能进入下一步操作,那么有4种方案可以解决我们遇到的问题。

2、绕过验证码的方案

1、测试环境去除验证码

可以和开发进行沟通,但是仅限于测试环境哦

2、万能验证码 (推荐)
3、通过添加cookie绕过登录

cookie是一门客户端技术,一般是由服务器生成返回给浏览器客户端来保存的,并且cookie是以 键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间...

如下便是一个cookie存储的位置,包含过期时间等:

Python —— 验证码的处理&执行JavaScript语句_第1张图片

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中执行才会生效哦,如下:

Python —— 验证码的处理&执行JavaScript语句_第2张图片

2、页面内嵌的滚动条

页面内嵌的滚动条移动需要2步,如下:

        1、先去定位内嵌滚动条元素

        2、再使用scrollTop进行滚动

实战演练:

Python —— 验证码的处理&执行JavaScript语句_第3张图片

Python —— 验证码的处理&执行JavaScript语句_第4张图片

2、在Python代码中调用JavaScript

1、方式一:不传参

模板语句如下:

driver.execute_script("...");

2、方式二:传参

模板语句如下:

element = driver.find_element(By.ID,"XX")
driver.execute_script("arguments[0]...",element)

你可能感兴趣的:(javascript,开发语言,ecmascript)