首页 > 编程问答 >Python selenium 网络抓取 recaptcha

Python selenium 网络抓取 recaptcha

时间:2024-07-22 11:56:02浏览次数:13  
标签:python selenium-webdriver web-scraping recaptcha

我想抓取一个网站,但在此之前有一个验证码,我什至使用 api 获取了数据,并且我还将其注入到网站中,因为网页没有提交按钮,我无法提交。流程是这样的,如果我解决同一网址中的验证码,隐藏的内容将被显示。但它并没有得到解决。我到处都找过了。我找不到解决方案。谁能帮我解决这个问题?

问题的解决方案和代码


我理解你想用 Python Selenium 抓取一个有 reCAPTCHA 保护的网站。虽然直接用 Selenium 解决 reCAPTCHA 并非易事(毕竟 reCAPTCHA 就是为了阻止机器人),但可以尝试以下几种方法:

1. 使用第三方 reCAPTCHA 解决服务:

  • 市面上有很多第三方服务,比如 2Captcha、Anti-captcha 等,可以付费帮你解决 reCAPTCHA。
  • 你需要注册这些服务并获取 API 密钥。
  • 然后,你可以使用 Selenium 将 reCAPTCHA 请求发送到这些服务,他们会返回解决后的令牌,你再将令牌提交到目标网站。

代码示例 (使用 2Captcha):

```python from selenium import webdriver from twocaptcha import TwoCaptcha

# 你的 2Captcha API 密钥 api_key = 'YOUR_2CAPTCHA_API_KEY'

# 初始化 2Captcha solver = TwoCaptcha(api_key)

# 初始化 Selenium driver = webdriver.Chrome() driver.get('https://你的目标网站.com')

# 获取 reCAPTCHA 元素 recaptcha_element = driver.find_element_by_class_name('g-recaptcha') # 根据实际情况修改

# 获取 reCAPTCHA 网站密钥 site_key = recaptcha_element.get_attribute('data-sitekey')

# 使用 2Captcha 解决 reCAPTCHA try: result = solver.recaptcha( sitekey=site_key, url='https://你的目标网站.com' ) except Exception as e: print(f"Captcha solving failed: {e}")

# 获取 reCAPTCHA 解决方案令牌 token = result['code']

# 将令牌注入到页面 driver.execute_script(f"document.getElementById('g-recaptcha-response').innerHTML='{token}';")

# 模拟提交表单 (如果需要) # ... ```

2. 使用 Selenium 的 JavaScript 执行能力:

  • 你可以使用 Selenium 执行 JavaScript 代码,模拟用户操作来解决 reCAPTCHA。
  • 这需要你分析 reCAPTCHA 的 HTML 结构和 JavaScript 代码,找到提交按钮或触发隐藏内容显示的逻辑。

代码示例 (模拟点击隐藏按钮):

```python from selenium import webdriver

driver = webdriver.Chrome() driver.get('https://你的目标网站.com')

# 假设隐藏内容由一个 ID 为 "hiddenContent" 的元素包裹 driver.execute_script("document.getElementById('hiddenContent').style.display = 'block';")

# 获取隐藏内容 hidden_content = driver.find_element_by_id('hiddenContent').text ```

重要提示:

  • 道德考量: 在抓取网站之前,请务必查看网站的 robots.txt 文件和服务条款,确保你的操作是被允许的。
  • 网站更新: 网站可能会更新其代码和反爬虫机制,导致你的代码失效。你需要定期更新代码以适应这些变化。
  • IP 封锁: 大量请求可能会导致你的 IP 被封锁。建议使用代理 IP 或设置请求间隔,避免被检测为机器人。

请记住,绕过 reCAPTCHA 并非总是可行或道德的。如果可能,建议寻找其他方法获取所需数据,例如网站提供的 API 或公开数据库。

标签:python,selenium-webdriver,web-scraping,recaptcha
From: 78774689

相关文章

  • Python 装饰器 详解+案例
    Python装饰器是一种特殊的函数,用于修改其他函数的功能。装饰器可以在不改变原函数代码的情况下,对函数进行增加、修改或者扩展功能。装饰器的语法形式是在函数定义前使用@符号,并在@后面加上装饰器的名称。装饰器函数接受被装饰函数作为参数,并返回一个修改后的函数。impo......
  • 如何在 vercel 部署中路由 python 和 typescript 无服务器函数
    我从一个带有Next.js和Typescript前端以及python后端的全栈应用程序开始。由于我们想在vercel上部署,因此我们将所有后端功能迁移到/api文件夹中的typescript函数中,可通过以下方式访问:fetch('api/**foldername**)问题是我有一个简单的pytorch模型,因此......
  • python中datetime模块
    datetime模块可以更方便的显示日期,并对日期进行计算。datetime模块中常用的类及其功能描述如下:datetime.datetime------>表示日期时间的类(常用)datetime.timedelta------>表示时间间隔的类(常用)datetime.date------>表示日期的类datetime.time------>表示时间的类datetime.......
  • Python - requests
    前言:介绍:安装及验证:使用:连续接口请求:传参方式: 前言:当你上班无聊的时候,你做什么,说实话有人让我写个requests的教程,教程我觉得网上已经有很多教程了,也很全面,我还是不要献丑了介绍:哎,我认为就是一个接口请求的仓库,不过requests属于第三方库,......
  • Python学习计划——2.4列表推导式(List Comprehensions)
    列表推导式是Python的一种简洁且强大的语法,用于生成新的列表。它可以用更少的代码、更清晰的方式来创建列表,特别是在处理简单的循环和条件操作时。1.基本语法列表推导式的基本语法如下:[expressionforiteminiterable]expression:表达式,计算结果用于生成列表的元素。ite......
  • Python学习计划——2.3常用内置函数(len, max, min, sum, etc.)
    Python提供了许多内置函数,用于简化对数据结构的操作。以下是一些常用的内置函数及其详细说明。1.len()len()函数用于返回对象(如列表、元组、字符串、字典等)的长度(元素个数)。示例:#列表fruits=["apple","banana","cherry"]print(len(fruits))#输出:3#元组c......
  • 哪个 Python 框架可以在 Google Collab 中显示和更改图像?
    我希望能够在使用GoogleCollab时为RL绘制高fps的位图。我现在可以使用OpenCV绘制图像cv2_imshowgoogle替换cv2.imshow但是,它无法替换现有图像,它下面绘制了新的我能够在替换imshow函数中使用一些JavaScript来修复它。但刷新率约为......
  • VSCode 自动建议 python 导入而不依赖 Intellisense
    我正在使用Transformer中的AutoModel之类的对象,并且经常遇到自动导入建议无法找到的对象。我总是希望VSCode建议“从Transformer中执行”,而不是费心寻找它找不到的原因每当看到未定义的“AutoModel”时,都会导入AutoModel”,因此无需扫描任何python导入目录。这......
  • 如何使用Python计算位移自相关函数?
    我正在使用python来分析粒子的异常扩散。我已经得到了粒子轨迹的位移,我想计算并绘制位移自相关与滞后时间t的关系。我认为可能存在使用t和位移(如deltar)的自相关函数的一般函数,但我不能没找到。我可以得到函数或代码吗?可以使用numpy和matplotlib库在Python......
  • 一天一点点,第四天Python基础
    第一天:一天一点点。Python基础-CSDN博客第二天:一天一点点,接上章Python基础-CSDN博客第三天:一天一点点,第三天Python基础(循环语句)-CSDN博客推导式推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。推导式是一种强大且简洁的语法,适用于生......