手册: 如何在 Selenium 中解决验证码问题
以下是 https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php 中 reCAPTCHA bypass 过程的逐步说明:
- 安装所需组件
- 在目标网页上找到 reCAPTCHA 的网站关键参数
- 使用 API 解决验证码问题
- 提交已解决的验证码
安装组件
您需要安装以下库:
- 2Captcha: 官方 Python SDK,用于轻松集成 2Captcha API
- Selenium
- webdriver-manager: 该库简化了 Selenium 驱动程序的下载和使用。
要安装这些库,请运行以下命令:
python -m pip install 2captcha-python selenium webdriver-manager
接下来,你需要找到一个 "site key "参数,并创建一个 Python 文件来编写验证码解决代码。
找到网站密钥
网站密钥是谷歌给所有 reCAPTCHA 表单的唯一标识符,它能唯一标识验证码。要解决验证码问题,你需要向验证码发送网站密钥。
要找到网页的网站密钥,请按以下步骤操作:
- 访问 https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php。
- 按 Ctrl/Cmd + Shift + I 键打开开发工具。
- 搜索
data-sitekey
并复制其值。 - 将站点密钥保存在提交求解请求时使用。
Solve the сaptcha
接下来,编写 Selenium 代码,访问目标页面并使用 2Captcha 解决验证码问题。
下面的代码就能做到这一点,记得将 2CAPTCHA_API_KEY
替换为你的 2Captcha API 密钥,将 SITE_KEY
替换为你之前存储的网站密钥。
from selenium.webdriver.common.by import By
from twocaptcha import TwoCaptcha
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
# 实例化 WebDriver
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# 加载目标页面
captcha_page_url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
driver.get(captcha_page_url)
# 解决验证码问题
print("Solving Captcha")
solver = TwoCaptcha("2CAPTCHA_API_KEY")
response = solver.recaptcha(sitekey='SITE_KEY', url=captcha_page_url)
代码 = response['code']
print(f "Successfully solved the Captcha. The solve code is {code}")
在这段代码中,我们使用 2captcha API 密钥初始化 TwoCaptcha 对象,并通过调用 recaptcha
方法传入网站密钥和当前页面 URL 来解决验证码问题。
recaptcha "方法会返回一个包含验证码的答案,并记录到控制台。
请注意,验证码的解决过程可能需要一些时间,所以请耐心等待
提交已解决的验证码
接下来,我们将找到 g-recaptcha-response
元素,将其值设置为已解 决的验证码,然后提交表单。
# 设置验证码
recaptcha_response_element = driver.find_element(By.ID, 'g-recaptcha-response')
driver.execute_script(f'arguments[0].value = "{code}";', recaptcha_response_element)
# 提交表单
submit_btn = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
submit_btn.click()
# 暂停执行,以便在关闭驱动程序前看到提交后的成功界面
输入("按回车键继续")
driver.close()
最终代码
以下是本教程使用 API 解决验证码问题的最终代码。
from selenium.webdriver.common.by import By
from twocaptcha import TwoCaptcha
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
# 实例化 WebDriver
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# 加载目标页面
captcha_page_url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
driver.get(captcha_page_url)
# 解决验证码问题
print("Solving Captcha")
solver = TwoCaptcha("2CAPTCHA_API_KEY")
response = solver.recaptcha(sitekey='SITE_KEY', url=captcha_page_url)
代码 = response['code']
print(f "Successfully solved the Captcha. The solve code is {code}")
# 设置已解决的验证码
recaptcha_response_element = driver.find_element(By.ID, 'g-recaptcha-response')
driver.execute_script(f'arguments[0].value = "{code}";', recaptcha_response_element)
# 提交表单
submit_btn = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
submit_btn.click()
# 暂停执行,以便在关闭驱动程序前查看提交后的屏幕情况
输入("按回车键继续")
driver.close()
将 2CAPTCHA_API_KEY
和 SITE_KEY
替换为它们的值,然后运行代码,验证码将被破解,你将看到成功界面。