使用2captcha API绕过旋转验证码:设置角度后验证失败
问题:2Captcha旋转验证码修改样式后验证失败
我正在尝试绕过2Captcha API演示页的旋转验证码,已完成API集成,但遇到JavaScript设置旋转角度的问题。观察发现,右键点击验证码图片每次旋转15度并更新img标签的style属性,点击11次可达到165度的正确角度。
我的脚本能成功修改style使图片显示为165度旋转,但点击验证按钮时仍失败。相关HTML代码:
<div class="_3i4YsKXQ1sT9uqskDtNNuA"><img src="/dist/web/43.png" alt="rotatecaptcha example" width="118" height="118" style="transform: rotate(165deg);"></div>
复现代码:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from time import sleep option = webdriver.ChromeOptions() # option.add_argument("--headless") option.add_argument("--start-maximized") driver = webdriver.Chrome(ChromeDriverManager().install(), options=option) driver.get('https://2captcha.com/demo/rotatecaptcha') image_element = driver.find_element(By.XPATH, '//img[@alt="rotatecaptcha example"]') new_style = f"transform: rotate(165deg);" driver.execute_script(f"arguments[0].setAttribute('style', '{new_style}')", image_element) sleep(3) try: driver.find_element(By.XPATH, '//button[@type="submit"]').click() sleep(15) except: print('无法定位验证按钮')
原因与解决方案
直接修改img标签的style属性仅改变了视觉显示,页面的验证码验证逻辑不会读取这个值——这类验证码在用户点击旋转按钮时,会同步更新隐藏字段或内部状态变量来记录实际旋转角度,验证时依赖这些存储的数值,而非DOM的style属性。
解决办法:
模拟真实点击旋转按钮
找到页面上的旋转按钮(右键点击验证码对应的触发元素),循环点击11次来达到165度:from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from time import sleep option = webdriver.ChromeOptions() option.add_argument("--start-maximized") driver = webdriver.Chrome(ChromeDriverManager().install(), options=option) driver.get('https://2captcha.com/demo/rotatecaptcha') # 替换为实际旋转按钮的选择器(可通过浏览器开发者工具查看) rotate_btn = driver.find_element(By.CSS_SELECTOR, '.旋转按钮的类名') # 点击11次,每次旋转15度 for _ in range(11): rotate_btn.click() sleep(0.3) # 等待页面更新状态 # 提交验证 try: driver.find_element(By.XPATH, '//button[@type="submit"]').click() sleep(15) except: print('无法定位验证按钮')直接调用页面旋转函数
如果找不到旋转按钮,可通过浏览器开发者工具查看页面处理旋转的JavaScript函数(比如rotateCaptcha()),直接调用该函数11次:# 替换为页面实际的旋转函数名 for _ in range(11): driver.execute_script("rotateCaptcha()") sleep(0.3)
内容的提问来源于stack exchange,提问作者usman Abbasi
相关产品推荐
相关产品推荐

