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

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

#界面点击账号登录
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空间,豆瓣这种滑动距离不变,而且没有严格的反爬,就容易的多。

你可能感兴趣的:(python,爬虫,selenium,selenium,python,测试工具)