爬虫从入门到入预(23)---大结局

今天是最后一个节课啦,主要内容是使用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篇笔记。这些都是我的宝贵财富,以后时不时都可以回来继续复习。说实话,视频爬取的技术还是不成熟,现行的前端技术日益变换,老师的那一套过时的很快,还是要继续多加学习!!!! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值