即使在更改标头和 IP 之后,验证码也会使用请求。我是如何被跟踪的?

Posted

技术标签:

【中文标题】即使在更改标头和 IP 之后,验证码也会使用请求。我是如何被跟踪的?【英文标题】:Captcha using requests even after changing headers and IP. How am I being tracked? 【发布时间】:2019-05-29 10:12:26 【问题描述】:

我正在尝试从 xyz 抓取一些文章但是,在抓取一定次数后,会出现验证码。

但是,我遇到了重大问题。

    我正在使用from fake_useragent import UserAgent 来随机化我的标题。

    我在请求之间使用随机睡眠时间

    一旦出现验证码,我将使用 *** 更改 IP 地址。但是,一旦我的 IP 地址出现,验证码仍然会出现。

这也很奇怪,因为当验证码出现在请求响应中时,验证码不会出现在浏览器中。

所以,我认为按标题是错误的。

我在获取这个请求时关闭了 js 和 cookie,因为有了 cookie 和 js,有明显的信息表明网站正在跟踪我。

headers = 
    "authority": "seekingalpha.com",
    "method": "GET",
    "path": "/article/4230872-dillards-still-room-downside",
    "scheme": "https",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "accept-encoding": "gzip, deflate, br",
    "accept-language": 'en-US,en;q=0.9',
    "upgrade-insecure-requests": "1",
    "user-agent": RANDOM

这与网站使用的内容接近:他们添加

"cache-control": "max-age=0",
"if-none-match": 'W/"6f11a6f9219176fda72f3cf44b0a2059"',

这对我的研究是 etags,用于 carching,可用于跟踪人员。 'W/...' 会更改每个请求。

另外,当我使用wkhtmltopdf 将屏幕打印为 pdf 时,我从未出现过验证码。我也尝试过使用更糟糕的硒。此外,我尝试过使用代理,如 here 所示。

所以肯定有办法做到这一点。但是,我没有正确地做到这一点。有谁知道我做错了什么?

编辑:

    会话似乎不起作用

    随机标题似乎不起作用

    随机睡眠似乎不起作用

    我可以使用我的 *** 访问网页。即使使用请求出现验证码,浏览器中的网站上也没有验证码。

    硒不起作用。

    我真的不想为解决验证码的服务付费。

我认为问题在于我没有很好地模仿浏览器。

【问题讨论】:

您确定您的 ***/代理正在被使用吗?另外,您使用的是requests 会话还是直接请求? 是的,正在使用 ***。使用requests.get("http://httpbin.org/ip") 进行检查。 好 :) 可能有多种原因.. 一些网站从常见的 *** IP 地址接收大量流量并将其视为潜在威胁。如果您使用代理(不是 ***),某些代理服务器不是匿名的,它们会在请求中传递您的实际 IP 地址。此外,某些网站可能会标记假用户代理(如果它们用于旧浏览器或不是真正的用户代理)。我正在测试您发布的网站(SeekingAlpha),看看我是否也收到了验证码。我会回复你的:) 【参考方案1】:

要确定被阻止并面临验证码的确切原因并不容易。以下是一些想法:

*** 和代理

有时,Captcha 服务(在本例中为 Google)可能会将常见的 *** IP 地址列入黑名单并将其视为潜在威胁,因为很多人都在使用它们并且他们产生大量流量。

有时,代理服务器(尤其是免费的)不是匿名的,可以在请求标头(特别是 X-Forwarded-For 标头)中发送您的实际 IP 地址

请求标头

您的请求中有某些重要的标头。让您的请求看起来合法的最简单方法是使用浏览器“开发者工具”中的“网络”选项卡,然后复制浏览器发送的所有标头。

重要的标题referer。虽然网站可能会或可能不会检查它,但将其与网站页面(或主页)之一的 URL 放在一起会更安全:

referer: https://seekingalpha.com/

超时和会话

尝试增加请求之间的超时时间。几秒钟应该是合理的。

最后,尝试在requests 中使用session 对象。他们自动维护 cookie 并跨多个请求更新referer,以模拟真实用户浏览网站。我发现它们在克服抓取保护方面最有帮助。

验证码

最后的办法是使用服务来破解验证码。有许多在线服务(主要是付费)可以做到这一点。一个流行的是 DeathByCaptcha。请记住,您可能违反了网站的使用条款,我不建议这样做:)

【讨论】:

这不是我的情况。使用我的 ***,我可以打开它而不会被阻止。我真的不想给我们提供验证码服务。另外,有了tor,我可以很好地使用该网站。我确信有办法做到这一点,因为该页面可以下载为 pdf 而不会被阻止。 关闭或打开cookies?因为如果您的 cookie 开启并且服务可以检测到您是“回访”访问者,您将不会被 *** 阻止。尝试在私人浏览器窗口中打开 URL。 另外,澄清一下,这是受验证码保护的 URL:seekingalpha.com/articles?page=10333。另一个 URL(实际文章)打开没有问题。 抱歉,我编辑了帖子。应该是“/article/4230872-dillards-still-room-downside” 哦,我明白了。该网址工作正常。我想这可能是另一个原因。您的请求标头中有referer 吗?

以上是关于即使在更改标头和 IP 之后,验证码也会使用请求。我是如何被跟踪的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使在指定返回 - 后台线程到主线程问题后代码也会执行?

如何从另一个来源访问 url?即使存在 Access-Control-Allow-* 标头,预检请求也会返回 401

节点 Keycloak 请求即使使用不记名令牌也会返回登录

即使存在标头,CORS 也会失败

即使存在标头,CORS 也会失败

Spring Boot 2.0.3 Oauth2 安全性:即使在标头中使用访问令牌时也会出现 401 错误