反反爬之js检测selenium篇(某宝)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sdzhr/article/details/86714328

声明:本文仅作为学习交流使用,如果侵犯了您的权益请联系我删除。

#使用selenium模拟淘宝登录,会无法通过滑块验证
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome()
driver.get(url='https://login.taobao.com')
J_Quick2Static = driver.find_element_by_id('J_Quick2Static')
J_Quick2Static.click()
TPL_username_1 = driver.find_element_by_id('TPL_username_1')
TPL_password_1 = driver.find_element_by_id('TPL_password_1')

TPL_username_1.send_keys('测试账号1')
TPL_password_1.send_keys('1234567')
time.sleep(1)

captcha = driver.find_elements_by_xpath('//div[@id="nocaptcha" and @style]')

if captcha:
    button = driver.find_element_by_id('nc_1_n1z')
    ActionChains(driver).click_and_hold(button).perform()
    ActionChains(driver).move_by_offset(258, 0).perform()
    ActionChains(driver).release(button).perform()
    login_button = driver.find_element_by_id('J_SubmitStatic')
    login_button.click()
    time.sleep(5)
else:
    print('不需要验证码')
    login_button = driver.find_element_by_id('J_SubmitStatic')
    login_button.click()
    time.sleep(5)
driver.quit()

上述代码正常情况下会被js检测到使用了selenium,从而导致无论怎么滑动滑块验证码都不会验证通过。

#用于检测selenium的js地址:https://g.alicdn.com/secdev/sufei_data/3.6.8/index.js
function r() {
            return "$cdc_asdjflasutopfhvcZLmcfl_"in u || f.webdriver
        }

如果你在selenium打开的浏览器的console控制台中输入navigator回车,你发现其中有个webdriver属性为true,而正常打开的浏览器却不会有这个属性。这是因为Chrome从v63版本开始添加了这一属性,只要通过selenium调用了浏览器便会将这个属性设置为true。

解决方案:
步骤1.使用低于v63版本的Chrome(v62.0.3202.62版本测试通过),当然也不要忘了将chromedriver换成对应版本
步骤2.使用vim将chromedriver的"$cdc_asdjflasutopfhvcZLmcfl_"这个key进行等量替换掉。

按照上述方案操作以后再去测试本文开头的代码便可以通过滑块验证,以上方法也可以用于模拟大鱼号的登录(阿里系)。
注:以上代码只能在webdriver有界面的情况下运行通过,使用无头模式淘宝验证码会验证失败,无头模式解决方案暂不公开。

在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页