pyppeteer(二)--验证码截图

这是pyppeteer介绍系列的第二篇--元素级别的截图
在经典的反反爬中,一些网站对爬虫不是很敏感,只是开启一些比较低级的反爬机制,比如数字字母混淆验证码。针对这类验证码,一般的操作是获取验证码的图片,然后上传到打码模块让模块去识别验证码,这里就先说明如何获取验证码图片。
以专利检索网http://www.pss-system.gov.cn/的登录系统为例子:

image.png

每次访问验证码图片的网址会刷新验证码图片,因此不能通过获取url连接这种方式获得验证码图片,因为这样做你访问登陆的时候是验证码1,访问url连接的时候就会变成验证码2了。
这里很自然地想到截图这种方式把图片截下来。很多教程只是copy教程,所以基本只有整个浏览器界面的截屏,但是其实pyppeteer可以实现元素级的截图功能。

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch({'headless':False})
    page = await browser.newPage()
    await page.goto('http://www.pss-system.gov.cn/sipopublicsearch/portal/uilogin-forwardLogin.shtml')
    await page.waitFor(10 * 1000) # 等待10秒看看验证码长什么样
    yazhengma = await page.waitForSelector('#codePic') # 通过css selector定位验证码元素
    await yazhengma.screenshot({'path': 'yazhengma.png'}) # 注意这里用的是ele.screenshot方法与教程1 page.screenshot是不同的
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())
1.gif

对于上面这种情况,这个功能的优势不是很明显,下面是图片验证码进化的一种例子。


image.png

image.png

image.png

嗯,某验的验证码就像这样,原图是打乱的,浏览器展示的图片是计算js后还原的图,如果想用连接方式取原图基本不可能,所以上述场景应用在这种网站就是十分适用了。

你可能感兴趣的:(pyppeteer(二)--验证码截图)