SeleniumBase中无法选中reCaptchaV2复选框问题求助
解决SeleniumBase点击reCAPTCHA复选框时浏览器崩溃的问题
问题根源排查与修复步骤
定位器语法错误:你写的
id#xxx格式不符合SeleniumBase定位规则,正确的ID定位应该用id=xxx(SeleniumBase内置语法)或CSS选择器#xxx。比如原代码中的span#recaptcha-anchor可简化为#recaptcha-anchor,无需指定标签名。未正确传递SB实例:你的
checkbox()函数直接使用sb对象,但未从外部传入已初始化的SB实例,这会触发未定义错误,直接导致浏览器崩溃。必须在函数参数中接收SB实例,并在创建实例后调用函数。reCAPTCHA反爬检测:普通模式的浏览器极易被reCAPTCHA识别为自动化工具,触发页面崩溃。需启用SeleniumBase的Undetected Chromedriver模式绕过检测。
等待逻辑不完善:仅用
wait_for_element只能确保元素存在,无法保证元素可点击。应改用wait_for_element_clickable,确保元素处于可交互状态后再执行点击。
修正后的代码示例
from seleniumbase import SB from func_timeout import func_set_timeout, FunctionTimedOut def checkbox(sb): print('- click checkbox') # 正确的CSS选择器定位reCAPTCHA复选框 checkbox_selector = '#recaptcha-anchor' try: # 等待元素可点击,超时时间设为10秒 sb.wait_for_element_clickable(checkbox_selector, timeout=10) sb.click(checkbox_selector) # 等待验证状态变更,替代固定sleep提升稳定性 sb.wait_for_condition("return document.querySelector('#recaptcha-anchor').ariaChecked === 'true'", timeout=8) except FunctionTimedOut as e: print('- 👀 checkbox超时:', e) except Exception as e: print('- ❌ 操作失败:', str(e)) # 初始化Undetected Chromedriver实例,绕过反爬检测 with SB(uc=True) as sb: # 打开目标页面 sb.open("https://你的目标页面地址.com") # 等待页面完全加载 sb.wait_for_page_ready() # 调用复选框点击函数 checkbox(sb)
额外注意事项
- 若目标页面加载缓慢,可增加
wait_for_page_ready()的超时参数,如sb.wait_for_page_ready(timeout=15)。 - 如果仍被反爬机制检测,可尝试添加自定义用户代理:
sb.set_user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
内容的提问来源于stack exchange,提问作者Kyomeki EL
相关产品推荐
相关产品推荐

