Selenium无头Chrome返回空页面源码求助(非UA问题)
解决Selenium Chrome无头模式返回空HTML的问题
以下是几个针对性的解决方案,按优先级尝试:
1. 使用新版无头模式并配置完整浏览器参数
旧版--headless模式的行为和正常浏览器差异较大,改用新版--headless=new,同时补充窗口大小、UA等参数,模拟真实环境:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 启用新版无头模式 options.add_argument("--headless=new") # 设置标准窗口大小,避免页面因视口过小不渲染 options.add_argument("--window-size=1920,1080") # 指定真实UA options.add_argument("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") # 禁用沙箱和共享内存限制(Linux环境常见需求) options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") driver = webdriver.Chrome(options=options) driver.get("你的目标页面URL") print(driver.page_source) driver.quit()
2. 等待页面异步加载完成
很多页面依赖JS异步渲染,无头模式下直接获取page_source可能在页面未加载完成时执行,需添加显式等待:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 初始化driver(同上) driver.get("你的目标页面URL") # 等待页面核心元素出现(替换成你目标页面的实际元素,比如某个class或标签) WebDriverWait(driver, 15).until( EC.presence_of_element_located((By.CLASS_NAME, "main-content")) ) # 此时再获取源码 print(driver.page_source) driver.quit()
3. 隐藏自动化检测特征
部分网站会识别Selenium/无头模式的特征并返回空页面,添加以下参数规避检测:
options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False)
4. 同步Cookie或会话状态
如果非无头模式下你已登录或有有效会话,无头模式默认是全新会话,可能因权限不足返回空页面。可以先在非无头模式下导出Cookie,再导入到无头模式:
# 第一步:非无头模式获取Cookie normal_driver = webdriver.Chrome() normal_driver.get("目标页面URL") # 完成登录或必要操作 cookies = normal_driver.get_cookies() normal_driver.quit() # 第二步:无头模式导入Cookie headless_driver = webdriver.Chrome(options=options) headless_driver.get("目标页面URL") for cookie in cookies: headless_driver.add_cookie(cookie) headless_driver.refresh() print(headless_driver.page_source) headless_driver.quit()
内容的提问来源于stack exchange,提问作者richve
相关产品推荐
相关产品推荐

