Selenium(Chrome)打开页面空白返回空HTML的问题求助
我在用Selenium(不管开不开无头模式)打开目标网站时,页面经常显示空白,返回的HTML是
<html><head></head><body></body></html>,但手动浏览器打开完全正常。试过设置time.sleep(10)、移除随机UserAgent、添加--remote-debugging-port=9222、--no-sandbox这些启动参数,甚至重装了chromedriver,都没解决。偶尔能正常加载,但大部分时候不行。昨天还出现过返回<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>的情况。我的代码如下:url = "https://www.arket.com/de_de/men/knitwear/product.alpaca-blend-jumper-grey.0937502001.html" options = Options() ua = UserAgent() userAgent = ua.random options.add_argument(f'user-agent={userAgent}') #options.add_argument("headless") driver = webdriver.Chrome('/path/to/chromedriver', options=options) time.sleep(5) driver.get(url) time.sleep(5) soup = BeautifulSoup(driver.page_source, 'html.parser') time.sleep(0.5) driver.quit() soup请问该怎么解决这个问题?
我之前也碰到过电商网站反爬导致Selenium加载空白页的情况,结合你的代码和问题描述,给你几个针对性的解决方案:
1. 隐藏Selenium自动化特征,避免被反爬检测
Arket这类电商站的反爬机制会检测navigator.webdriver等自动化标识,你需要彻底隐藏这些特征:
from selenium.webdriver.chrome.options import Options options = Options() # 建议用真实的主流浏览器UA,比如Chrome最新版本的UA,比随机UA更稳定 options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36') # 禁用自动化控制提示 options.add_argument("--disable-blink-features=AutomationControlled") # 排除自动化开关 options.add_experimental_option("excludeSwitches", ["enable-automation"]) # 禁用自动化扩展 options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options) # 执行JS移除webdriver标识 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
2. 用显式等待替代固定sleep,确保页面加载完成
固定的time.sleep()太不可靠,网页加载速度受网络影响波动大。改用显式等待,等待页面关键元素出现后再获取源码:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException driver.get(url) try: # 等待商品标题元素加载(根据Arket页面实际元素调整选择器) WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.CLASS_NAME, 'product-name')) ) except TimeoutException: print("页面关键元素加载超时,可能被反爬拦截") # 此时再获取页面源码 soup = BeautifulSoup(driver.page_source, 'html.parser')
3. 检查地域限制,尝试使用德国代理IP
目标网站是德国区的Arket,可能会验证访问IP的地域。如果你的IP不在德国,网站可能返回空白页。可以添加德国代理:
# 替换成有效的德国代理IP和端口 options.add_argument('--proxy-server=http://de-proxy-ip:port')
同时可以模拟德语环境,减少地域检测风险:
options.add_argument('--lang=de-DE')
4. 确保Chrome和chromedriver版本完全匹配
版本不兼容是Selenium常见问题,建议用webdriver-manager自动管理chromedriver版本,避免手动匹配出错:
from webdriver_manager.chrome import ChromeDriverManager # 自动安装匹配当前Chrome版本的chromedriver driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
5. 启用无头模式时使用新版参数
如果需要无头模式,建议用Chrome 112+支持的--headless=new,它的行为更接近真实浏览器,不容易被检测:
options.add_argument("--headless=new") options.add_argument("--window-size=1920,1080") # 设置窗口大小,避免页面布局异常 options.add_argument("--disable-gpu")
内容的提问来源于stack exchange,提问作者sebk




