selenium模拟破解京东滑块验证码

本文介绍了如何利用selenium自动化工具模拟登录京东,并解决滑块验证码。通过下载验证码原图,利用opencv识别计算滑动距离,实现自动化滑动。尽管最终无法成功登录,但加深了对爬虫技术的理解,特别是面对动态验证码的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

selenium模拟破解京东滑块验证码

原理:利用selenium模拟登陆京东,在账号密码多次输入错

误的情况下,网站会跳出滑块验证码,设计好代码自动下载验

证码原图,通过cv2识别计算出滑动距离。

话不多说,源码如下:


import time
import requests
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import cv2
import os,base64
from urllib import request
#账号密码随便输,多试几次会跳出验证码
id_v='2725656674' #京东账号
password_v='13049267664'#京东密码
driver=webdriver.Chrome()
wait=WebDriverWait(driver,3)
driver.get('https://www.jd.com/')






#加速度
'''
def get_tracks(x):
    v=0
    t=0.3
    tracks=[]
    current=0
    mid=x*4/5
    while current<x:
        if current<mid:
            a=2
        else:
            a=-3
        v0=v
        s=v0*t+0.5*a*(t**2)
        current+=s
        tracks.append(round(s))
        v=v0+a*t
    return tracks
'''

#界面点击账号登录
enter=driver.find_element_by_xpath('//*[@id="ttbar-login"]/a[1]').click()#//*[@id="msShortcutLogin"]/span
#点击账号登录
login=driver.find_element_by_xpath('//*[@id="content"]/div[2]/div[1]/div/div[3]/a').click()

#获取用户名和密码
id=driver.find_element_by_xpath('//*[@id="loginname"]')
id.send_keys(id_v)

password=driver.find_element_by_xpath('//*[@id="nloginpwd"]')
password.send_keys(password_v)
#获取登录按钮
btn=driver.find_element_by_xpath('//*[@id="loginsubmit"]').click()
y=0
while True:

    #验证码原图
    jd_bj=driver.find_element_by_xpath('//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[1]/img')
    #滑块图
    jd_hk=driver.find_element_by_xpath('//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[2]/img')
    #滑块
    ele_hk=driver.find_element_by_xpath('//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[2]/div[3]')
    #提取src属性
    jd_img=jd_bj.get_attribute('src')
    hk_img=jd_hk.get_attribute('src')
    #print(jd_img)
    #print(hk_img)

    request.urlretrieve(jd_img, "jd_bj_img.png")
    request.urlretrieve(hk_img, "hk_bj_img.png")


    def juli():

        bj_rgb = cv2.imread('jd_bj_img.png')
        bj_gray = cv2.cvtColor(bj_rgb, cv2.COLOR_BGR2GRAY)
        hk_rgb = cv2.imread('hk_bj_img.png')
        res = cv2.matchTemplate(bj_rgb, hk_rgb, cv2.TM_CCOEFF_NORMED)
        lo = cv2.minMaxLoc(res)
        # print(lo[2][0])
        return lo[2][0] #识别返回滑动距离



   
    print("下载成功!")
    x = juli()
    # 278:网页原图像素
    # 360:下载后尺寸
    x = int(x * 278 / 360)

    #滑动滑块
    #seleniu滑动
    action=ActionChains(driver)
    #按住滑块元素
    action.click_and_hold(ele_hk).perform()
    #滑动距离
    #tracks=get_tracks(x)
    #for track in tracks:

    action.move_by_offset(x,0).perform()
    time.sleep(10)
    # 松开滑块
    action.release(ele_hk).perform()
    time.sleep(2)
    y=y+x
    if y==x:

        break
    else:
        y=0


        try:
            driver.find_element_by_xpath('//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[1]/div[2]').click()
            time.sleep(1)
        except Exception as e:
            break


为了测试,花了几天的时间,奈何技术有限,虽然滑块能成功对上缺口,但就是登陆不了。

京东的反爬技术,估计能识别自动登录,但通过这次实践,对爬虫技术也有了一个更深度的了解。

不管什么网站,破解原理一样。像qq空间,豆瓣这种滑动距离不变,而且没有严格的反爬,就容易的多。

根据提供的引用内容,可以看出这篇文章介绍了如何使用纯JS非Selenium的方式爆破京东滑块验证码,并没有提供如何使用Selenium登录京东并去除滑块的方法。不过,可以提供以下步骤来使用Selenium登录京东并去除滑块: 1. 安装Selenium库和对应的浏览器驱动(如ChromeDriver)。 2. 导入Selenium库和其他需要的库。 3. 创建一个浏览器对象,打开京东登录页面。 4. 使用Selenium模拟用户输入账号密码并点击登录按钮。 5. 判断是否出现滑块验证码,如果有则模拟拖动滑块,否则直接登录成功。 6. 关闭浏览器。 以下是一个示例代码: ```python from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time # 创建浏览器对象 browser = webdriver.Chrome() # 打开京东登录页面 browser.get('https://passport.jd.com/new/login.aspx') # 输入账号密码并点击登录按钮 browser.find_element_by_id('loginname').send_keys('your_username') browser.find_element_by_id('nloginpwd').send_keys('your_password') browser.find_element_by_id('loginsubmit').click() # 判断是否出现滑块验证码 if 'slide' in browser.page_source: # 获取滑块元素 slider = browser.find_element_by_class_name('JDJRV-slide-inner') # 模拟拖动滑块 ActionChains(browser).click_and_hold(slider).perform() ActionChains(browser).move_by_offset(258, 0).perform() time.sleep(0.5) ActionChains(browser).release().perform() # 登录成功,可以进行后续操作 # ... # 关闭浏览器 browser.quit() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值