之前用selenium进行图片验证码识别时,核心逻辑是首先获取浏览器全屏截图,再对验证码元素进行坐标定位,最后利用定位对浏览器全屏进行截图,想想还是挺复杂的,这次用pyppeteer库进行识别一下。相对selenium识别相对方便很多。
举一个例子,比如识别这张登录验证码,再到平台自动打码,最后点击自动登录获取登录cookies。
接下来,在代码中先初始化对象
async def init():
global page
browser = awAIt launch(**KW_ARGS)
page = (await browser.pages())[-1]
await page.setViewport({'width':WINDOW_WIDTH,'height':WINDOW_HEIGHT})
async def openWeb():
url = 'http://xxxx.com/User/Login'
await page.goto(url)
await page.waitForSelector('#username',options={'timeout':TIMES_OUT*1000})
await page.evaluate("document.body.style.zoom='0.8'")
# await page.waitFor(TIMES_OUT*1000)
获取验证码图片id
对验证码图片进行截屏保存
async def get_screen_shot():
element = await page.waitForSelector('#Verify')
await element.screenshot(path='screen.png')
查看验证码图片,发现已经将验证码图片保存本地了。
后面调用第三方打码平台,对图片进行识别就可以了
拿到识别的代码,接下来我们模拟输入账号信息,点击登录就可以了
async def loging():
await page.evaluate("document.body.style.zoom='1'")
await page.type('#username', USER, {'delay': 100})
await page.type('#password', PASS, {'delay': 100})
await get_code()
await page.waitFor(3 * 1000)
登录成功后,获取cookies,将cookies保存到本地,方便我们请求库进行请求,获取登录后页面信息,后面就可以进行数据的抓取了