新闻动态

用pyppeteer自动识别某度旋转验证码

2022-05-06

有时我们频繁的爬取或者自动化模拟抓取某度数据时,会弹出旋转验证码,对于这种验证码识别也有解决措施。在网上了解别人的操作手法,学习并加以利用。

首先,运行一下自动拖动正确位置,完成识别:

用pyppeteer自动识别某度旋转验证码

 

对于这种验证码的解决思路,首先是获取旋转图片的地址,获取旋转图片,通过模型识别图片的旋转角度,再通过旋转角度公式计算旋转距离。最后进行模拟滑动就可以了。下面一一讲解一下。

一、获取图片角度

获取到图片的元素后,再通过模型方法获取图片的旋转角度,再获取图片按钮的宽度和滑轨距离。通过公式move_line = angle / 360 * b 计算角度对应的滑动距离。

用pyppeteer自动识别某度旋转验证码

 

async def auto_rotate(self):
    rotImg = await self.page.querySelector('.vcode-spin-img')
    while rotImg:
        img_url = await (await rotImg.getProperty("src")).jsonValue()
        angle = process_images(img_url)[0]
        print(angle)
        bottom_line = await (await (await self.page.querySelector(".vcode-spin-bottom")).getProperty("offsetWidth")).jsonValue()
        button_line = await (await (await self.page.querySelector(".vcode-spin-button")).getProperty("offsetWidth")).jsonValue()
        print(bottom_line)
        print(button_line)
        b = bottom_line - button_line
        print(b)
        move_line = angle / 360 * b
        print(move_line)

二、模拟拖到

获取到角度信息后,接下来就是模拟拖到了。将拖到距离分为两部分,第一部分匀加速,第二部分匀减速。一直拖动到目标角度距离。

async def try_validation(self, distance=308):
    distance1 = distance - 10
    distance2 = 10
    btn_position = await self.page.evaluate('''
       () =>{
        return {    
         x: document.querySelector('.vcode-spin-button').getBoundingClientRect().x,
         y: document.querySelector('.vcode-spin-button').getBoundingClientRect().y,
         width: document.querySelector('.vcode-spin-button').getBoundingClientRect().width,
         height: document.querySelector('.vcode-spin-button').getBoundingClientRect().height
         }}
        ''')
    x = btn_position['x'] + btn_position['width'] / 2
    y = btn_position['y'] + btn_position['height'] / 2
    # print(btn_position)
    await self.page.mouse.move(x, y)
    await self.page.mouse.down()
    await self.page.mouse.move(x + distance1, y, {'steps': 30})
    await self.page.waitFor(800)
    await self.page.mouse.move(x + distance1 + distance2, y, {'steps': 20})
    await self.page.waitFor(800)
    await self.page.mouse.up()

最后运行主函数完成拖动

用pyppeteer自动识别某度旋转验证码

 

具体识别思路,可参考某大神的解决方案,本人也是在他的基础下,完成旋转验证码的拖动,不过就识别准确率上来说,总体上来说还行吧。详细请参考:
https://blog.csdn.net/Laozizuiku/article/details/106645583?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=4

在线充值在线咨询在线电话返回顶部

技术支持

电话咨询

19922193247

超10000+ 企业选择我们,快速体验!

温馨提示:我们将在您提交信息后的30分钟内与您取得联系,请您保持电话通畅,谢谢!