Python Pyppeteer 实现京东滑块验证码破解
本文详细介绍如何使用Python的Pyppeteer库配合OpenCV实现京东登录滑块验证码的自动破解。通过解析滑块缺口距离并结合模拟鼠标拖动轨迹,提供完整的异步代码示例,帮助开发者掌握Web自动化中的反爬应对技巧。
Pyppeteer简介
在深入Pyppeteer之前,有必要先了解其前身Puppeteer。Puppeteer是Google开发的一款基于Node.js的工具,主要提供操作Chrome浏览器的API。它允许开发者通过JavaScript代码控制Chrome浏览器,从而完成数据抓取、Web应用自动化测试等任务。
在之前的文章中,我们已经详细解析了Python爬虫中Pyppeteer的使用方法,感兴趣的读者可以查阅往期内容以获取更多信息。
本文将重点介绍如何利用Python Pyppeteer破解京东网站的滑块验证码,具体实现代码如下。
import asyncio
import random
import cv2
from pyppeteer import launch
from urllib import request
# 滑块的缺口距离识别
async def get_distance():
img = cv2.imread('image.png', 0)
template = cv2.imread('template.png', 0)
res = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
value = cv2.minMaxLoc(res)[2][0]
distance = value * 278/360
return distance
async def main():
browser = await launch({
'headless': False,# 需要设置一个路径
'userDataDir': r'E:\mj',
'args': ['--no-sandbox', '--window-size=1366,768'],
})
page = await browser.newPage()
await page.setViewport({'width': 1366, 'height': 768})
await page.goto('https://passport.jd.com/login.aspx')
await page.waitFor(1000)
await page.click('div.login-tab-r')
await page.waitFor(1000)
# TODO 模拟人工输入用户名、密码 输入自己的账号密码
await page.type('#loginname', 'yazhishaw',
{'delay': random.randint(60, 121)})
await page.type('#nloginpwd', '123456',
{'delay': random.randint(100, 151)})
await page.waitFor(2000)
await page.click('div.login-btn')
await page.waitFor(3000)
# 模拟人工拖动滑块、失败则重试
while True:
if await page.J('#ttbar-login'):
print('登录成功!')
await page.waitFor(6000)
break
else:
image_src = await page.Jeval('.JDJRV-bigimg >img', 'el => el.src')
request.urlretrieve(image_src, 'image.png')
template_src = await page.Jeval('.JDJRV-smallimg >img', 'el => el.src')
request.urlretrieve(template_src, 'template.png')
await page.waitFor(3000)
el = await page.J('div.JDJRV-slide-btn')
box = await el.boundingBox()
await page.hover('div.JDJRV-slide-btn')
distance = await get_distance()
await page.mouse.down()
await page.mouse.move(box['x'] + distance + random.uniform(30, 33), box['y'], {'steps': 20})
await page.waitFor(random.randint(300, 700))
await page.mouse.move(box['x'] + distance + 29, box['y'], {'steps': 20})
await page.mouse.up()
await page.waitFor(3000)
asyncio.get_event_loop().run_until_complete(main())
至此,关于使用Python Pyppeteer破解京东滑块验证码的代码介绍已完毕。如需了解更多相关Pyppeteer与京东滑块的内容,建议搜索本站历史文章或继续浏览后续内容。感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













