京东滑块验证码过不了
用selenium写的代码测试京东滑块验证,每次滑块都对不准,或对准了也无法模拟登录
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import ddddocr
from PIL import Image
import requests
import base64
from io import BytesIO
from selenium.webdriver.common.action_chains import ActionChains
import random
chrome_options = Options()
# chrome_options.add_argument("--headless")
# chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
wd = webdriver.Chrome(options=chrome_options)
wd.get('https://passport.jd.com/new/login.aspx?ReturnUrl=http%3A%2F%2Fsearch.jd.com%2FSearch%3Fkeyword%3D%25E6%25B8%25B8%25E6%2588%258F%25E4%25B8%25BB%25E6%259C%25BA%26enc%3Dutf-8%26spm%3Da.0.0%26pvid%3D5e08dc4a947348c9a76ee2d28f407fde&czLogin=1')
print(wd.title)
wd.maximize_window()
wd.find_element(By.ID, 'loginname').send_keys('17871951280')
wd.find_element(By.ID, 'nloginpwd').send_keys('your_password')
wd.find_element(By.XPATH,'//*[@id="formlogin"]/div[5]').click()
time.sleep(5)
#动作链设计
while wd.title == '京东-欢迎登录':
bg_url = wd.find_element(By.XPATH, '//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[1]/img').get_attribute('src').split(',')[1]
target_url = wd.find_element(By.XPATH, '//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[2]/img').get_attribute('src').split(',')[1]
bg_url_bs = base64.b64decode(bg_url)
target_url_bs = base64.b64decode(target_url)
# 存储二进制数据
bg = Image.open(BytesIO(bg_url_bs))
target = Image.open(BytesIO(target_url_bs))
bg.save('bg.png')
target.save('target.png')
# 滑块位置计算
det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)
with open('bg.png', 'rb') as f:
bg = f.read()
with open('target.png', 'rb') as f:
target = f.read()
res = det.slide_match(target, bg, simple_target=True)
print(res)
# 模拟拖动,乘以窗口缩放比例
ActionChains(wd).click_and_hold(wd.find_element(By.XPATH, '//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[2]/img')).perform()
ActionChains(wd).move_by_offset((res['target'][0])/200*33, 0).perform()
ActionChains(wd).move_by_offset((res['target'][0])/200*33, 0).perform()
ActionChains(wd).move_by_offset((res['target'][0])/200*33, 0).perform()
ActionChains(wd).move_by_offset((res['target'][0])/200*33, 0).perform()
ActionChains(wd).release().perform()
time.sleep(10)