You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Selenium被网站检测?已尝试多方案仍遇验证码

解决方案

核心问题:未正确利用undetected_chromedriver

你代码里已经导入了专门用于绕过检测的undetected_chromedriver,但全程仍在使用标准的webdriver.Chrome初始化浏览器,等于浪费了这个工具的核心功能。

具体修复步骤

  • 改用undetected_chromedriver启动浏览器:它会自动处理navigator.webdriver标记、隐藏自动化特征,比手动堆砌参数靠谱得多。
  • 简化冗余配置:undetected_chromedriver自带防检测逻辑,无需重复添加--disable-blink-features=AutomationControlled这类参数。
  • 模拟真实用户行为:添加随机延迟、鼠标移动、页面滚动等操作,避免机械性的爬虫行为触发检测。
  • 规范代理使用(如果用代理):确保代理IP未被网站标记,且在undetected_chromedriver中正确配置。

修改后的示例代码

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
from datetime import date, timedelta,datetime
import sys
import random
import undetected_chromedriver as uc

def get_prices():
    # 直接用uc初始化浏览器,自动匹配对应版本的ChromeDriver
    driver = uc.Chrome()
    
    # 模拟真实用户的随机延迟
    time.sleep(random.uniform(1.5, 3.0))
    
    driver.get("https://www.skyscanner.fr/transport/vols/cdg/cgk/?adultsv2=1&cabinclass=economy&oym=2308&iym=2309&selectedoday=01&selectediday=05")
    
    # 等待页面加载,加入随机延迟避免机械操作
    wait = WebDriverWait(driver, 15)
    time.sleep(random.uniform(2.0, 4.0))
    
    # 模拟鼠标随机移动到页面元素
    try:
        body_element = wait.until(EC.presence_of_element_located((By.TAG_NAME, "body")))
        actions = ActionChains(driver)
        actions.move_to_element(body_element).perform()
        time.sleep(random.uniform(0.5, 1.5))
    except:
        pass
    
    # 后续爬取逻辑...

if __name__ == "__main__":
    get_prices()

额外建议

  • 控制请求频率:不要短时间内重复调用爬取函数,每次调用间隔至少5-10分钟,模拟真实用户的搜索节奏。
  • 避免固定User-Agent:可以定期更换UA,或者让undetected_chromedriver自动使用当前Chrome的原生UA。
  • 验证码备选方案:如果仍触发验证码,可考虑接入合规的验证码识别服务,或在必要时手动介入验证。

内容的提问来源于stack exchange,提问作者sashalarso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:50:15