爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别.docxVIP

爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别 在我们写爬虫的过程中,目标网站常见的干扰手段就是设置验证码等,本就将基于Selenium实战讲解如何处理弹窗和验证码,爬取的目标网站为某仪器预定平台 可以看到登录所需的验证码构成比较简约,是彩色的标准数字协作简约的背景干扰 因而这里的验证码识别不需要借助人工智能的手段,可直接利用二值法对图片处理后交给谷歌的识别引擎tesseract-OCR即可获得图中的数字。 注:selenium?和?tesseract?的配置读者可自行搜索,本文不做引见) Python实战 首先导入所需模块 import?re #?图片处理 from?PIL?import?Image #?文字识别 import?pytesseract #?扫瞄器自动化 from?selenium?import?webdriver import?time 处理弹出框问题 先尝试打开示例网站 url?=?/client driver?=?webdriver.Chrome() driver.get(url) time.sleep(30) 好玩的地方消灭了,网站显示了一个我们前面没有看到的弹窗,简约说一下弹窗的学问点,初学者可以将弹出框简约分为alert和非alert alert式弹出框 alert(message)方法用于显示带有一条指定消息和一个 OK 按钮的警告框 confirm(message)方法用于显示一个带有指定消息和 OK 及取消按钮的对话框 prompt(text,defaultText)方法用于显示可提示用户进行输入的对话框 看一下这个弹出框的js是怎样写的: 看起来好像是alert式弹出框,那么直接用driver.switch_to.alert吗?先不急 非传统alert式弹出框的处理 弹出框位于div层,跟平常定位方法一样 弹出框是嵌套的iframe层,需要切换iframe 弹出框位于嵌套的handle,需要切换窗口 所以我们对这个弹出框进行元素审查 所以问题实际上很简约,直接定位按钮并点击即可 url?=?/client driver?=?webdriver.Chrome() driver.get(url) time.sleep(1) driver.maximize_window()?#?最大化窗口 driver.find_element_by_xpath(//div[@class=jconfirm-buttons]/button).click() 猎取图片位置并截图 二值法处理验证码的简约思路如下: 切割截取验证码所在的图片 转为灰度后二值法将有效信息转为黑,背景和干扰转为白色 处理后的图片交给文字识别引擎 输入前往的结果并提交 切割截取验证码的图片进一步思考处理策略:首先猎取网页上图片的css属性,依据size和location算出图片的坐标;然后截屏;最终用这个坐标进一步去处理截屏即可(由于验证码js的特殊性,不能简约猎取img的href后下载图片后读取识别,会导致前后不婚配) img?=?driver.find_element_by_xpath(//img[@id=valiCode]) time.sleep(1) location?=?img.location size?=?img.size #?left?=?location[x] #?top?=?location[y] #?right?=?left?+?size[width] #?bottom?=?top?+?size[height] left?=?2?*?location[x] top?=?2?*?location[y] right?=?left?+?2?*?size[width]?-?10 bottom?=?top?+?2?*?size[height]?-?10 driver.save_screenshot(valicode.png) page_snap_obj?=?Image.open(valicode.png) image_obj?=?page_snap_obj.crop((left,?top,?right,?bottom)) image_obj.show() 正常情况下直接使用注释的四行代码即可,但不同的电脑不同的扫瞄器,缩放倍率存在差异,因而假如截取出的图存在偏差这需要考虑乘上倍率系数。最终可以再加减数值进行微调 可以看到图片这成功截取出来了! 验证码图片的进一步处理 这个阈值需要具体用Photoshop或者其他工具尝试,即找到一个像素阈值能够将灰度图片中真实数据和背景干扰分开,本例经测试阈值为205 img?=?image_obj.convert(L)??#?转灰度图 pixdata?=?img.load()

文档评论(0)

duanbingbing + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档