如何有效地绕过验证码

导读:作为自动化程序开发人员,爬虫工程师,Captcha是一项网页测试中不可避免地阻碍。 Captcha会阻止您构建可运行的机器人。会误导甚至终止你地爬虫程序。本文将介绍如何有效地发现并绕过验证码。

一、什麽是验证码
二、网站用来防止机器人访问内容地验证码类型
三、如何检查开发地程序是否遭遇验证码地阻拦
四、如何有效地绕过验证码

作为自动化程序的开发者,在页面上遇到验证码的原因是自动化程序的行为导致发送过多请求并以自动化方式访问网站。作为普通用户只能一个接一个地解决Captcha,但是作为程序员,应该很清楚地知道这种情况产生的原因。你可以学习如何防止它们出现,或者学习如何解决它们的、
作为自动化程序的开发者,我认为最好的方式有两种:1)是一开始就避免使用它们,因为其中有些可能很难通过自动化方式解决;2)是使用自动化验证码程序或者服务,如2CAPTCHA去解决这个问题。

一、什麽是验证码
Captcha是全自动公共图灵测试的缩写,可以告诉计算机和人类。有时全写为CAPTCHA。这是一种挑战响应测试,旨在确定互联网流量背後的用户是人还是机器(计算机)。
这项技术被引入到互联网领域,以响应自动化机器人的行动。这些机器人可以是任何形式的——web scraper、爬虫、蜘蛛、购买机器人、批量帐户创建机器人,以及任何其他形式的向web服务器发送HTTP请求的软件,而无需使用web服务器管理员提供的官方公共API 。
这些机器人以向网站发送过多请求而闻名,这可能使它们崩溃或增加其运行成本,而无助於他们访问的网站。但是,这不是与机器人相关的唯一问题。当期望用户在有限的时间内执行某些任务,并且在购买限量版运动鞋,门票和其他高需求物品的竞争激烈时,它们可以用於获得不当优势。殭屍程序还会未经网站所有者的许可从网页收集数据。由於这些因素以及更多因素,网站采用了Captchas等技术来阻止机器人访问。

二、网站用来防止机器人访问内容地验证码类型
当人们听到有关验证码的信息时,他们将其仅视为“我不是机器人”复选框。但是,网站会使用大量的验证码来确定请求的真实来源。了解它们很重要,这样您就不会遇到验证码问题,而会转向其他地方。我将讨论每种验证码类型。

1)图像验证码
Image验证码是您在互联网上遇到的最受欢迎的验证码。它要求您识别图像中的对象。 Google的reCaptcha提供了最有效的验证码服务之一-但是,这甚至会使普通用户感到沮丧。 Image Captcha将其中的字母易於使用。

2)单词/数学验证码
这种验证码将要求您解决一些单词或数学问题。验证码就是一个例子,要求您解决“ 3 + 5”。这会以多种形式出现。

3)Honeypots
这些都不容易发现。这是因为它们是使用真实用户的CSS属性隐藏的,但是由於漫游器下载了全部内容,因此他们可以看到它们。当机器人与honeypot进行交互时,honeypot可能是表单或链接中的隐藏字段,因此不可避免地会报告自己是机器人。您将必须考虑CSS属性,并确保在可见性处於关闭或隐藏状态时不要与任何元素交互。

4)隐形验证码
无法看到隐藏的验证码。它们在後台工作并跟踪行为,以确定是否从漫游器发起了来自某些IP的请求。它们是有效的,但是其有效性仍然值得怀疑,因为经验丰富的开发人员可以开发可以模仿常规用户的机器人。

5)社交媒体登录
这些类型的验证码要求您登录社交媒体帐户。这些不受欢迎,因为Web管理员意识到Internet用户会犹豫不决。

6)时间跟踪
这种Captcha的工作方式很简单,它们只是跟踪您执行某些动作(例如填写表格)的速度,并且可以根据机器人的运行速度判断机器人是否刚刚填写了表格。

三、如何检查开发地程序是否遭遇验证码地阻拦
如果您怀疑您的机器人是否被验证码打断,则需要查看Web服务器返回的响应。有时,您甚至不会在代码中重新设置验证码;当您仍然可以使用浏览器访问同一页面时,它可能只是一个持续的超时错误。也可能是您会收到某种形式的50x错误。

四、如何有效地绕过验证码
在线填写表单,发送太多典型的机器人请求时,您最有可能遇到验证码,或者它们只是在您根本不知道触发它们的原因的情况下发生。一般来说,我们可以通过一些两种方法解决验证码。

1)使用IP Rotation
避免触发验证码的第一种方法是使用IP Rotation。轮换代理服务器使网站可以帮助隐藏真实IP地址并使用其他IP地址,并在一定时间间隔或每次请求後轮换分配给您请求的IP,从而在您发送的请求中识别IP足迹。
一般来说,您可以从Luminati,Smartproxy,Stormproxies和2CAPTCHA购买IP Rotation的服务。
为了安全起见,您可以使用Proxy API,也称为网络抓取API。
代理API不仅可以轮换IP,还可以打破验证码(如果出现的话)的阻拦。
Scraping API,Scrape Hunter和Crawlera是市场上一些最好的代理API。

  • 随机化请求之间的时间
    殭屍程序具有预测性,重复性和超快性-网站可以将其用於您的殭屍程序。为了保护您的漫游器免於触发验证码,我建议您随机分配两次请求之间的时间间隔。
    最好在请求之间设置延迟,以免网站被请求淹没–这样做不仅是为了避免Captcha,而且要对网站保持礼貌并避免造成损害。

  • 避免Honeypots
    如前所述,某些不可见元素可以引入网页中。这些元素对使用浏览器的用户不可见,但对漫游器可见。通过与这些元素进行交互,您的机器人就可以直接引起人们的注意。
    重要的是,检查要与之交互的所有元素的CSS属性,并确保未关闭可见性并且显示未设置为隐藏。仅当这两个属性为您提供绿灯时,您才可以继续进行操作并与元素进行交互。幸运的是,并非所有网站都使用此功能,但是对於使用该功能的网站,您必须要小心。

  • 渲染所有JS代码
    大量的Web爬虫没有提供JavaScript,它们只是发送请求,完整下载页面,解析出所需的数据,然後循环继续。好了,即使您能够在不渲染JavaScript的情况下访问所有必需的数据,您仍将需要在某些网页上渲染JS代码,以避免触发Captcha。
    如果您遇到的网站会在某些JS代码呈现之前触发Captcha,则您需要找出要呈现的JS代码并进行呈现。这可能是很多工作。因此,我建议您使用诸如Selenium之类的浏览器自动化工具。

  • 避免使用直接链接
    我必须承认,我确实使用直接链接,直到我确定某个网站可以利用它们来检测机器人。 Web管理员意识到人们不仅访问他们的页面,还访问其他页面。它们是从其他页面引用的。如果有大量直接链接请求传入,则网站将处於防御状态,并触发验证码。建议您访问要在其上访问的链接的其他页面,或者使用引荐来源标头欺骗网站,以为您被引荐而不是仅发送直接链接请求。

    2)使用2CAPTCHA的自动验证码识别服务

有时,无论您做什麽,都无法避免。例如,某些注册页面和其他填写表单页面的“提交”按钮前都有Captcha,并且您必须先解决它们才能提交表单。那麽验证码怎麽识别?
在这种情况下,您无法避免-您必须解决它们。最有可能的是,您不想手动解决它们,而是希望它自动完成。那就是使用Captcha解决服务。
解决验证码的另一种方法是利用验证码识别服务,自动解决验证码识别网站的问题。这些服务利用人工智能,机器学习和许多其他技术来解决验证码。我会建议您使用付费的验证码服务,因为它们更有效。最好的验证码识别服务是由2Captcha提供的。

2CAPCHA的工作流程:
2CAPCHA的工作流程

如果使用的是google 浏览器的话,可以直接使用2CAPTCHA的拓展程序,从而高效快捷地解决验证码识别问题。

2CAPCHA的验证码识别能力
我们的服务使用大量人员的人工进行识别,并且可以识别人类可以识别的任何人类可读的验证码。甚至这是一款可以做到绕过登陆验证码软件。此外,该服务不仅可以识别文本验证码,还可以识别任何图形验证码,例如ReCaptcha V2,Adirra,FunCaptcha等。

验证码

另外,2CAPCHA还能有效识别hCaptcha。具体的教程见:Solving hCaptcha

总结
毫无疑问,在开发访问Web服务不允许访问的Web服务的自动化机器人时,您可以忽略Captcha,因为您很可能会遇到它们。
有趣的是,通过正确的思维方式以及将一些技术集成到您的机器人开发中,您可以避免触发Captcha –这些技术已在上面进行了讨论。但是,如果您必须解决Captcha的情况,则可以使用Captcha解决服务或代理API来 解决它们。


<<:  AutoCAD ActiveX #5 SelectionSet

>>:  iOS工程师面试深入浅出- 物件导向的三大特性?

Python - PySparkPracticeQuestions - PySpark 练习题参考笔记

Python - PySparkPracticeQuestions - PySpark 练习题参考笔...

DAY22 - 二分搜寻(一)

二分搜寻有随机访问的特性,在数组是有序的情况下,透过访问的元素,推测左右两侧的性质,展现较高的效率。...

DAY2-EXCEL统计分析:各项绘图功能与特色

如何绘制图表: 先建立一份咖啡厅的销售量资料 点选上方工具列的<插入>--<图表&...

挑选命题的要件 | ML#Day4

过去那一段时间,直到感受做不出明确的实作成果,和夥伴才意识到题目有问题。 经验整理一下,或许可以用几...

[NestJS 带你飞!] DAY18 - Lifecycle Hooks

什麽是 Lifecycle Hook? 在开始介绍之前,先来了解一下何谓 生命周期 (Lifecyc...