如何使用Python3+Selenium解决reCAPTCHA验证问题
解决Selenium处理reCAPTCHA验证的问题
问题场景
你用Python3 + Selenium + geckodriver编写爬虫,登录网站时遇到reCAPTCHA验证:有时仅需点击复选框即可通过,有时会触发完整的图片验证任务,现有代码无法处理后者,需要解决这个问题。
现有代码
# PAGE driver.get("url") # LOGIN step = 'step_1;01_-_Login' timeInit = time.time() driver.find_element(By.ID, "email").send_keys("user") driver.find_element(By.ID, "password").send_keys("Pass") driver.switch_to.frame(0) # CAPTCHA time.sleep(3) driver.find_element(By.CSS_SELECTOR, ".recaptcha-checkbox-border").click() time.sleep(2)
可行解决方案
1. 手动干预(最简单直接)
reCAPTCHA的设计目标就是阻止自动化工具,完整验证任务很难通过纯代码自动完成。可以在代码中加入检测逻辑,当发现触发完整验证时,暂停程序让人工完成验证:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 登录和点击复选框后 try: # 检查是否出现完整reCAPTCHA验证的iframe(根据实际页面元素调整选择器) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'iframe[src*="recaptcha/api2/bframe"]')) ) print("请手动完成reCAPTCHA验证,完成后按回车继续...") input() except: # 没有触发完整验证,继续后续流程 pass
2. 使用第三方验证码服务
可以借助专门的验证码识别服务(如2Captcha),这类服务通过人工或AI识别验证码后返回验证结果,你只需调用其API获取token,再通过Selenium注入到页面中。注意:使用这类服务需遵守目标网站的robots协议和相关法律法规。
3. 优化爬虫行为,降低触发验证的概率
reCAPTCHA会根据请求特征判断是否为机器人,优化操作模式可以减少验证出现的频率:
- 替换固定
time.sleep()为显式等待,等待元素加载完成再操作,避免过快的机械操作 - 随机化操作间隔,比如用
time.sleep(random.uniform(1,3))代替固定等待时间 - 设置真实的浏览器用户代理,避免使用Selenium默认标识
- 模拟人类的鼠标移动、页面滚动等操作,而非直接调用
click()和send_keys() - 避免频繁更换IP或短时间内发起大量请求
内容的提问来源于stack exchange,提问作者user22303072
相关产品推荐
相关产品推荐

