使用Selenium Chrome无头模式访问网站陷入循环报错该如何解决?
解决方法
你看到的反复输出的内容只是浏览器的控制台提示日志,本身不是程序报错,无限循环的核心原因是目标站点做了无头浏览器检测,识别到Selenium的自动化标识后会反复触发资源加载逻辑,才会不断打印相同日志。
按以下要求修改代码即可解决:
- 新增
--disable-blink-features=AutomationControlled启动参数,隐藏Selenium的自动化控制标识,规避站点的基础反爬检测 - 手动指定普通Chrome的User-Agent,无头模式默认的UA带有HeadlessChrome标识,极易被站点识别
- 可选添加
--log-level=3参数,屏蔽控制台的INFO级日志,避免无关信息干扰排查 - 新增页面加载超时限制,避免因站点反爬导致无限等待
修改后的完整代码如下:
from selenium import webdriver from selenium.webdriver.chrome.options import Options web = "https://www.powerplay.com/sportsbook/SOCCER/" chrome_options = Options() chrome_options.headless = True # 反检测核心参数 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option("useAutomationExtension", False) # 替换为你本地Chrome的UA,也可以直接使用当前最新的桌面Chrome公开UA chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") # 屏蔽INFO级日志 chrome_options.add_argument("--log-level=3") # 解决跨环境资源限制问题,Windows、Linux环境都可添加 chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") driver = webdriver.Chrome(options=chrome_options) # 抹掉浏览器的webdriver标识,进一步规避检测 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) # 设置页面加载超时30秒,超时后自动停止加载 driver.set_page_load_timeout(30) try: driver.get(web) # 可添加截图操作验证页面是否加载成功 driver.save_screenshot("load_result.png") except Exception as e: print("页面加载异常:", e) finally: driver.quit()
如果修改后还是无法正常加载,将Chrome和对应版本的ChromeDriver升级到最新版即可,旧版本无头模式的反检测能力更差,更容易被站点识别。
内容的提问来源于stack exchange,提问作者Ariel
相关产品推荐
相关产品推荐

