文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python selenium滑动验证防检测

2023-01-31 08:22

关注

目标网站:aliexpress(全球速卖通)阿里国际站

登录url : https://login.aliexpress.com/

image.png


python selenium 输入用户名,密码 拖动滑块验证,因为这个不涉及到缺口,理论上是很简单的

配置好selenium的环境:

pip install selenium

下个对应google浏览器版本的chromedriver驱动,放在python安装目录下(win环境)

image.png

第一次尝试的代码:

from selenium import webdriver
import time
from selenium.webdriver import ActionChains


def selenium_login_alibaba(self, url):
    option = webdriver.ChromeOptions()
    option.add_argument('--start-maximized')
    browser = webdriver.Chrome(chrome_options=option)
    browser.delete_all_cookies()
    browser.get(url)
    try:
        # 隐式等待
        time.sleep(2)
        browser.implicitly_wait(20)
        time.sleep(0.1)
        browser.find_element_by_xpath("//input[@id='fm-login-id']").send_keys('username')
        time.sleep(0.2)
        browser.find_element_by_xpath("//input[@id='fm-login-password']").send_keys('password')
        time.sleep(0.3)
        # 获取滑块长,宽
        button = browser.find_element_by_xpath("//span[@id='nc_1_n1z']")
        small_sliding = button.size
        # 获取整个div的长,宽
        big_sliding = browser.find_element_by_xpath("//span[@class='nc-lang-cnt']").size
        # 滑动的距离
        sliding_distance = big_sliding.get('width') - small_sliding.get('width')
        print(sliding_distance)
        ActionChains(browser).click_and_hold(button).perform()
        for i in [99, 87, 51, 59]:
            ActionChains(browser).move_by_offset(xoffset=i, yoffset=0).perform()
            time.sleep(random.random())
        ActionChains(browser).release().perform()
        time.sleep(1)
        browser.find_element_by_xpath("//button[@class='fm-button fm-submit password-login']").click()

效果如下:

test.gif


验证失败了,其实就是chromedriver被检测出来了.怎么解决呢?这里需要用一个打开exe程序的工具,对chromedriver里面的key进行更改,至于linux,mac应该也有类似工具。

(win环境工具) 下载地址: https://pan.baidu.com/s/1SnmXcCSeE2YT3Z8-Hey7yA  提取码 : wat7


找到解压目录,打开exe.

image.png

下一步用wxmedit.exe 打开 chromedriver.exe

查找$cdc

image.png


把cdc替换成abc(随意3个什么都行,不能多写也不能少写,长度一定要对应)

替换成功后保存,保存,保存....

image.png


接下来,重新来过,更改key后的尝试:

代码如下:

from selenium import webdriver
import time
from selenium.webdriver import ActionChains


def selenium_login_alibaba(self, url):
    option = webdriver.ChromeOptions()
    option.add_argument('--disable-infobars')
    option.add_argument('--start-maximized')
    option.add_argument('user-agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"')
    option.add_argument('--disable-extensions')
    option.add_argument('--profile-directory=Default')
    option.add_argument("--incognito")
    prefs = {"profile.managed_default_content_settings.images": 2}
    option.add_experimental_option("prefs", prefs)
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    browser = webdriver.Chrome(chrome_options=option)
    browser.delete_all_cookies()
    browser.get(url)
    try:
        # 隐式等待
        time.sleep(2)
        browser.implicitly_wait(20)
        time.sleep(0.1)
        browser.execute_script('Object.defineProperties(navigator,{webdriver:{get:()=>false}})')
        browser.find_element_by_xpath("//input[@id='fm-login-id']").send_keys('username')
        time.sleep(0.2)
        browser.find_element_by_xpath("//input[@id='fm-login-password']").send_keys('password')
        time.sleep(0.3)
        # 获取滑块长,宽
        button = browser.find_element_by_xpath("//span[@id='nc_1_n1z']")
        small_sliding = button.size
        # 获取整个div的长,宽
        big_sliding = browser.find_element_by_xpath("//span[@class='nc-lang-cnt']").size
        # 滑动的距离
        sliding_distance = big_sliding.get('width') - small_sliding.get('width')
        print(sliding_distance)
        ActionChains(browser).click_and_hold(button).perform()
        for i in [99, 87, 51, 59]:
            ActionChains(browser).move_by_offset(xoffset=i, yoffset=0).perform()
            time.sleep(random.random())
        ActionChains(browser).release().perform()
        time.sleep(1)
        browser.find_element_by_xpath("//button[@class='fm-button fm-submit password-login']").click()

效果如下: 滑动验证成功了,这种可以解决大部分的chromedriver检测机制

login.gif


欢迎加qq群交流:  198447500

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯