今天是最后一个节课啦,主要内容是使用selenuim和超级鹰破解人机交互验证,基于一个比较官方的网站。
from selenium.webdriver import Chrome
from selenium.webdriver.common.action_chains import ActionChains#导入事件链
from selenium.webdriver.chrome.options import Options
from chaojiying import Chaojiying_Client
import time
#初始化超级鹰
chaojiying=Chaojiying_Client('17512573261','zzy8794400','930916')
#破解selenuim被识别,主要原因是里面的一个字段navigator.webdriver被设置为true,人为浏览器都是false
#下面的方法针对不同的版本chrome,可以写不同的js脚本修改这个字段值,使我们的selenuim 不会被发现。
# 1.chrome的版本号如果小于88 在你启动浏览器的时候(此时没有加载任何网页内容), 向页面嵌入js代码. 去掉webdriver
# web = Chrome()
#
# web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
# "source": """
# navigator.webdriver = undefined
# Object.defineProperty(navigator, 'webdriver', {
# get: () => undefined
# })
# """
# })
# web.get(xxxxxxx)
# 2.chrome的版本大于等于88
option = Options()
# option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled')
web=Chrome(options=option)
web.get('**********.html')
web.find_element_by_xpath('//*[@id="J-userName"]').send_keys('17512573261')
web.find_element_by_xpath('//*[@id="J-password"]').send_keys('zzy8794400')
web.find_element_by_xpath('//*[@id="J-login"]').click()
time.sleep(5)
#拖拽操作
btn=web.find_element_by_xpath('//*[@id="nc_1_n1z"]')
ActionChains(web).drag_and_drop_by_offset(btn,300,0).perform()
time.sleep(20)
总结:新的知识点有:从webdriver.common导入事件链,这个模块可以帮助我们实现点击事件和拖动滑块等。options模块可以帮我们传递参数。其次代码里还包含了不同版本的chrome怎么避免被识别出selenuim。因为这个官方网站的改版所以登录的时候没有继续用超级鹰,但是老师的课还是用到了超级鹰的。
以下代码就是使用超级鹰去通过人机验证的,从识别结果的字典里面拿到正确图片的坐标值,然后设置事件链,将鼠标移动到相对坐标,设置点击事件。不要忘了事件链的最后都是要perform()的。
# 用超级鹰去识别验证码
dic = chaojiying.PostPic(verify_img_element.screenshot_as_png, 9004)
result = dic['pic_str'] # x1,y1|x2,y2|x3,y3
rs_list = result.split("|")
for rs in rs_list: # x1,y1
p_temp = rs.split(",")
x = int(p_temp[0])
y = int(p_temp[1])
# 要让鼠标移动到某一个位置. 然后进行点击
# 醒了 -> 掀开被子 -> 坐起来 -> 穿鞋子 -> 穿衣服 -> 开始执行动作
ActionChains(web).move_to_element_with_offset(verify_img_element, x, y).click().perform()
写在最后的感想:磕磕绊绊最后也终于完结撒花了,课程时长14小时,写了23篇笔记。这些都是我的宝贵财富,以后时不时都可以回来继续复习。说实话,视频爬取的技术还是不成熟,现行的前端技术日益变换,老师的那一套过时的很快,还是要继续多加学习!!!!