Selenium处理网页爬取中的Cookies与人机验证问题
一、处理Cookies授权弹窗
别用固定的time.sleep,用显式等待定位并点击同意按钮更可靠,能避免页面加载慢导致的元素找不到问题。示例代码:
# 初始化显式等待对象,最长等待10秒 wait = WebDriverWait(driver, 10) try: # 根据实际页面的按钮特征调整定位方式,这里以"Accept All"文本按钮为例 accept_cookie_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Accept All')]"))) accept_cookie_btn.click() except: # 若未检测到弹窗,直接跳过即可 pass
注意:不同网站的Cookies按钮选择器不同,需要用浏览器开发者工具(F12)查看按钮的id、class或文本内容,替换上述定位逻辑。
二、处理人机验证(reCAPTCHA等)
Selenium很难直接绕过专业的人机验证,以下是几种可行的解决思路:
使用undetected-chromedriver:这是经过修改的ChromeDriver,能规避大部分反爬检测,降低触发人机验证的概率。安装后替换原有的webdriver即可:
from undetected_chromedriver import Chrome driver = Chrome() driver.maximize_window() driver.get(url)手动介入完成验证:在触发验证时暂停代码执行,手动完成验证后再继续运行:
# 点击登录按钮后触发验证 input("请手动完成人机验证,完成后按回车继续...") # 后续业务代码复用已登录Cookie:先手动登录一次目标网站,导出登录状态的Cookie,然后在Selenium中加载这些Cookie,直接跳过登录和验证步骤:
# 示例:加载提前导出的Cookie(需将Cookie整理为字典列表格式) cookies = [{"name": "auth_token", "value": "xxxxxx"}, ...] driver.get(url) for cookie in cookies: driver.add_cookie(cookie) # 刷新页面后即可维持登录状态 driver.refresh()打码平台辅助:对接第三方打码服务,通过API自动完成验证,但这种方式需要付费,且需注意合规性。
内容的提问来源于stack exchange,提问作者Ido Kobi
相关产品推荐
相关产品推荐

