世界焦点!盘点一个Python网络爬虫过验证码的问题(方法一)
时间:2023-06-22 08:04:25来源:程序员客栈
点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书


(资料图片仅供参考)

低眉信手续续弹,说尽心中无限事。

大家好,我是皮皮。

一、前言

前几天在Python最强王者群【鶏啊鶏。】问了一个Python网络爬虫的问题,这里拿出来给大家分享下。

下面是他的代码:

from selenium import webdriverfrom selenium.webdriver.common.by import Byimport timefrom PIL import Imageimport ddddocrocr = ddddocr.DdddOcr()options = webdriver.ChromeOptions()options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")options.add_argument("--disable-blink-features=AutomationControlled")driver = webdriver.Chrome(options=options)# 打开目标网页driver.get("https://sol.sinosure.com.cn")time.sleep(5)driver.maximize_window()# 定位验证码图片元素并模拟鼠标悬停以加载图片yanzhengma = driver.find_element(By.CSS_SELECTOR, ".pass-form-item.pass-form-item-code")captcha_element = yanzhengma.find_element(By.CSS_SELECTOR,  ".pass-label-img")webdriver.ActionChains(driver).move_to_element(captcha_element).perform()time.sleep(5)# 获取验证码图片元素的位置和大小location = captcha_element.locationsize = captcha_element.sizeprint(location)print(size)# 截取整个网页的截图driver.save_screenshot("screenshot.png")# 根据验证码图片元素的位置和大小,从整个网页截图中裁剪出验证码图片left = int(location["x"])top = int(location["y"])right = int(location["x"] + size["width"])bottom = int(location["y"] + size["height"])captcha_screenshot = Image.open("screenshot.png").crop((left, top, right, bottom))print(left)print(top)print(location)print(bottom)# 保存裁剪后的验证码图片,并进行识别captcha_screenshot.save("captcha.png")with open("captcha.png", "rb") as f:    img_bytes = f.read()res = ocr.classification(img_bytes)print("识别的验证码是:" + res)

基本思路是没啥问题的,确实也是可以拿到对应界面的截图,只不过是验证码的位置截取出现了点偏差,导致验证码没正确识别到。

下面这个代码是获取验证码图片元素的位置和大小:

location = captcha_element.locationsize = captcha_element.size

这个部分我看介绍应该是会返回定位的元素位置,我刚刚大致拖拉了一下在裁剪前的定位打印出来确实就已经去了输入密码附近的位置了 但是我定位的元素是验证码的地方,并且我也尝试了先定位验证那个位置的大元素再定位至具体的验证码图片位置  问题依旧。

上面是粉丝的疑惑,下面一起来看看解决办法。

二、实现过程

这里【魏哥】尝试了下代码,但是出现下图报错:

这个报错还是蛮常见的,对于时常使用sel的人来说,这个报错算是家常便饭了,报错的原因是本地浏览器驱动和谷歌浏览器的版本不匹配,需要更换本地浏览器驱动。

关于这个问题的解决方法,就是去网页下载对应浏览器版本的对应驱动,放到本地指定文件夹,确保该文件夹路径有加入环境变量。该问题的解决办法公众号历史文章也有提及,网上的解决教程也一大堆,这里不再赘述。

言归正传,继续回到这个问题的解决办法。这里【甯同学】给了一个思路,直接找到 验证码的图片的url 用requests 请求 验证码的.content 用 ocr.classification(验证码的.content) 就可以了 不用保存图片 在open读取二进制流,代码如下所示:

顺利地解决了粉丝的问题,如果对requests和Beautiful还不熟悉的小伙伴,可能接受起来就比较困难一些。

这里只是给出了其中一个方法,另外的一个方法,一起看下一篇文章,敬请期待!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python网络爬虫过验证码的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【鶏啊鶏】提问,感谢【甯同学】、【魏哥】给出的思路和代码解析,感谢【Ineverleft】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting1),应粉丝要求,我创建了一些高质量的Python付费学习交流群和付费接单群,欢迎大家加入我的Python学习交流群和接单群!

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

------------------- End -------------------

往期精彩文章推荐:

if a and b and c and d:这种代码有优雅的写法吗?

Pycharm和Python到底啥关系?

都说chatGPT编程怎么怎么厉害,今天试了一下,有个静态网页,chatGPT居然没搞定?

站不住就准备加仓,这个pandas语句该咋写?

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群】

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

标签:

最新
  • 世界焦点!盘点一个Python网络爬虫过验证码的问题(方法一)

    点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Pyth

  • 开户哪个证券公司比较好?证券开户哪家佣金最低?

    开户哪个证券公司比较好?中国证券公司开户比较好的是:中金财富证券

  • 董明珠称孟羽童直播带货是义务劳动真的吗?董明珠为什么会选择孟羽童?

    董明珠称孟羽童直播带货是义务劳动真的吗?2021年,格力电器董事长兼

  • 王传君是日本人吗?王传君现在怎么样了?

    王传君是日本人吗王传君不是日本人,他是中国人,但是因为在《爱情

  • 环球视讯!蔚来手机通过工信部无线电核准:支持UWB超宽带技术

    在去年12月24日举办的NIODay2022上,蔚来手机以间接亮相的形式首次出现

  • 天喻信息:6月16日融资买入1363.19万元,融资融券余额3.31亿元_每日速读

    6月16日,天喻信息(300205)融资买入1363 19万元,融资偿还1820 38万

  • 海淀城管进校园 普及电力安全知识-环球聚看点

    今年6月是第22个全国安全生产月,为进一步强化中小学生用电安全意识,

  • HPB300是什么意思 hpb300是什么意思

    1、hpb300是一级钢筋。2、一级钢筋是旧钢筋规范里的称谓,通常称HPB300

  • FF 91又鸽了!法拉第未来宣布首款车型第二阶段交付推迟_每日热闻

    FF91又鸽了!法拉第未来宣布首款车型第二阶段交付推迟

  • 通讯!武威市气象台发布大风黄色预警信号【2023-06-16】

    武威市气象台2023年06月16日22时00分发布大风黄色预警信号:预计17日清

  • 呼声与回应|男子称去延安阳光医院看病“被套路”割包皮竟要花1.1万?|天天微头条

    “我感觉自己被延安阳光医院套路了,明明说的一千左右,最后却交了1 1

  • 微资讯!猝不及防!西安又一本土房企破产,买房人要警惕!

    猝不及防!西安又一本土房企破产,买房人要警惕!,买房人,开发商,购房

  • “埃及正式申请加入金砖”_天天讯息

    r n t(观察者网讯)据塔斯社6月14日报道,俄罗斯驻埃及大使乔治·

  • 昂科烧录器支持MPS芯源半导体单相直流无刷电机驱动器MP6517DGJS|全球速看料

    芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的

  • 河北,北方戏窝子丨由“野腔”发展而来的河北西狄邱沙东落子

    西狄邱沙东落子戏起源可上溯到清乾隆二十年,根据当地人称做“野腔”的

  • 关闭windows安全警报_如何关闭windows安全警报-环球时讯

    如何关闭Windows安全警报?我们在使用电脑的时候,经常会在浏览网页的

  • 旅游
    • 2022年生活服务业连锁企业TOP100发布,20.8万门店年销售规模1781.9亿

    • 前5个月审批核准固定资产总投资6672亿元

    • 全球观速讯丨上海机场:浦东国际机场5月飞机起降量32,618架次

    • 世界新资讯:中国队夺得体操亚锦赛女团冠军 邱祺缘斩获个人全能冠军