selenium最常见的就是登录,但是登录有个坑,就是验证码的问题,关于验证码一共四个办法:
1.让开发注释掉验证码。
2.让开发设置一个万能验证码,只要输入这个验证码,就通过。
3.跳过验证码直接登录成功。
4.验证码识别技术。
第三条写的很模糊,不过下面就介绍一下第三条的实现方法。
先说一下实现思路:
1.打开要测试的网页,获取登录前的cookie(可以抓包获取,可以代码实现,下面会附上代码)。
2.手动登录,再获取登录后的cookie。
3.对比两次获取的cookie,找出登录后多出来的cookie,只要多出来的name和value就行(一般name就是token)。
4.在代码里加上写入cookie,把找出来的name和value写入。然后再写一遍打开网页的代码。
下面放上代码(不要着急复制代码为自己所用,代码后面会写限制,有些登录用这代码也跳不过去,哈哈)。
#coding=utf-8
from selenium import webdriver
import time
#下面四行这么写是去掉谷歌浏览器上面提示的,第二行和第三行分别对应不同的提示
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
# options.add_argument('disable-infobars')
browser = webdriver.Chrome(chrome_options=options)
#
browser.maximize_window()
#打开火狐浏览器
# browser=webdriver.Firefox()
#输入网址
browser.get("https://m.flycua.com/h5/#/")
#点击登录,用下面注释的代码获取cookie,实现跳过登录,执行脚本的时候就不用这部分了
# browser.find_element_by_id("su").click()
# cookie1= browser.get_cookies()
#打印登录前的cookie
# print (cookie1)
#等待30秒,用这30秒时间完成登录操作
# time.sleep(30)
#获取登录后的cookie
# cookie2= browser.get_cookies()
#打印登录后的cookie
# print (cookie2)
#
#加入要获取的cookie,写进去
browser.add_cookie({'name':'tokenId', 'value':'8BB8FDD4FBB31F92424A7E0EBE872E01A4AF77654043DAD638E9F93B378F94E19A882A6C7E78999C9A5482985FDA333C3D1E5236C6BDA7935A89178F053FB490'})
#再次输入网址
browser.get("https://m.flycua.com")
上面代码包含了获取cookie和实现跳过登录的所有代码,注释部分一定要看清楚。(最早写的是用的python2,后来又拿到python3的环境上执行,根据自己python版本,对脚本略作修改,应该只有print要修改)
然后我再说一下这代码的局限性。
1.可以看出cookie里有tokenId,这个tokenId可以使用比较长的一段时间,前提是只执行这自动化脚本,不能再手动登录。因为手动登录又会产生一个新的tokenId,代码需要更新。
2.如果某些网站打开直接就是登录页,那恐怕就跳不过登录了,即使写入cookie,第二次打开的网页,仍然是登录页,即使写了登录后的网址。(我还见过更厉害的,登录之前和登录之后网址都不变)
如果不幸要测试的网站中了第二条,那么只能放弃这中办法了。验证码识别会在后续写,可以百度搜索:selenium-识别验证码,我会用这个标题,可能就搜出我写的了。