【问题标题】:How to complete geetest (captcha) when scraping, by python-requests, while request values are taken by solving captcha manually?如何在抓取时通过python请求完成geetest(验证码),而通过手动解决验证码获取请求值?
【发布时间】:2026-02-13 04:45:02
【问题描述】:

我正在尝试抓取网站,该网站使用 datadome,经过一些请求后,我必须完成 geetest(滑块验证码拼图)。

这是一个示例链接: captcha link

我决定不使用 selenium(至少现在),我正在尝试通过 python 模块解决我的问题:Requests. 我的想法是自己完成 geetest 然后在我的程序中发送相同的请求,我的网络浏览器在完成该滑块后发送。

  1. 一开始,我在验证码提示后抓取了网站上的html代码:

    <head><title>allegro.pl</title><style>#cmsg{animation: A 1.5s;}@keyframes A{0%{opacity:0;}99%{opacity:0;}100%{opacity:1;}}</style></head><body style="margin:0"><p id="cmsg">Please enable JS and disable any ad blocker</p><script>var dd={'cid':'AHrlqAAAAAMAsB0jkXrMsMAsis8SQ==','hsh':'77DC0FFBAA0B77570F6B414F8E5BDB','t':'fe','s':29701,'host':'geo.captcha-delivery.com'}</script><script src="https://ct.captcha-delivery.com/c.js"></script></body></html>
    
  2. 我无法访问最重要信息所在的 iframe,但我发现可以使用来自上述 html 代码的信息构建指向该 iframe 的链接。正如您在上面的链接中看到的: cid是initialCid,hsh是hash等,链接的一部分,cid是我在captcha出现的那一刻得到的一个cookie。

  3. 我看到有可用的服务可以为你解决验证码,所以我决定自己完成验证码,然后向我的程序发送准确的请求,包括 cookie 和标头,然后在我的程序中通过请求发送请求.现在我是手动做的,但它不起作用。响应为 403,手动时为 200 并重定向。

这是我的浏览器在完成验证码后发送的示例请求:

sample request

我在程序中通过以下方式发送它:

s = requests.Session()
s.headers = headers
s.cookies.set(cookie_from_web_browser)
captcha = s.get(request)

响应是 403,我不知道如何使它工作,帮助我。

【问题讨论】:

    标签: python web-scraping cookies python-requests recaptcha


    【解决方案1】:

    验证码在网络抓取世界中非常棘手,大多数情况下,您可以通过解决验证码然后手动获取返回的源的 cookie 并将其插入脚本来绕过这个问题。根据网站的不同,cookie 可以保存 15 分钟、一天甚至更长时间。

    另一种选择是使用验证码解决服务,例如https://www.scraperapi.com/,您需要为 x 数量的请求支付费用,但您不会遇到验证码问题,因为他们会为您解决这些问题

    【讨论】:

    • 感谢您的回答,我很感激,我正在尝试手动操作,您能帮帮我吗?
    • 1) 打开一个新选项卡,然后让页面加载验证码 2) 使用 f12 打开您的网络选项卡,然后解决验证码 3) 返回的页面上会有一个 cookie 4) 放置 cookie进入标题并解决请求
    • 这实际上是不同的方法,但输出是相同的,并且有效!!!非常感谢你。
    • @Kuba-a 没问题,如果它对你有帮助,请接受它赞赏的答案,祝你好运!
    【解决方案2】:

    使用头参数来解决这个问题。就这样

    header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" ,
        'referer':'https://www.google.com/'
    }
    
    r = requests.get("http://webcache.googleusercontent.com/search?q=cache:www.naukri.com/jobs-in-andhra-pradesh",headers=header)

    在使用真实 url 运行之前使用 web 缓存对其进行测试

    【讨论】: