求助:Selenium无法加载特定零售网页的原因排查
嘿,我之前爬零售网站时也遇到过一模一样的问题!Coles这类大型零售站点大概率是检测到了Selenium的自动化特征,所以直接返回了空白页面。给你几个实用的调试和解决方向:
可能的解决方案
1. 给ChromeDriver添加浏览器伪装参数
ChromeDriver默认会留下明显的自动化标记(比如navigator.webdriver属性),网站很容易通过这个识别出你在用爬虫工具。你可以通过修改配置来模拟真实浏览器:
from selenium.webdriver.chrome.options import Options URL = "https://shop.coles.com.au/a/national/everything/browse/pantry/breakfast?pageNumber=1" options = Options() # 禁用自动化检测标志 options.add_argument("--disable-blink-features=AutomationControlled") # 设置真实的用户代理 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") browser = webdriver.Chrome(executable_path="C:\ChromeDriver\chromedriver", options=options) browser.get(URL)
2. 添加显式等待,确保页面动态加载完成
很多零售网站用JS动态渲染内容,就算页面看起来空白,可能只是元素还没加载出来。你可以用Selenium的显式等待来等核心元素出现:
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 browser.get(URL) try: # 等待商品列表元素加载,这里的class名需要你自己用F12确认 WebDriverWait(browser, 15).until( EC.presence_of_element_located((By.CLASS_NAME, "product-tile")) ) # 现在再获取页面源码就没问题了 page_source = browser.page_source except TimeoutException: print("页面加载超时,大概率还是被反爬机制拦截了")
3. 检查是否触发了Cloudflare或验证码验证
有些站点会用Cloudflare这类防护工具,第一次访问会弹出验证页面(比如滑块、人机验证),Selenium默认是处理不了的。这种情况下你可以:
- 手动打开该URL,完成验证后,导出浏览器的Cookie
- 在Selenium启动后,把这些Cookie添加进去,跳过验证步骤
4. 用新无头模式伪装(可选)
如果不想打开可视化浏览器,Chrome 112+的新无头模式更接近真实浏览器,不容易被检测:
options.add_argument("--headless=new") options.add_argument("--window-size=1920,1080") # 设置窗口大小,避免被识别为无头爬虫
你可以先从修改浏览器参数开始试,这是解决这类问题最常用的方法。如果还是不行,打开浏览器F12看网络请求,有没有返回403/404状态码,能帮你更快定位问题。
内容的提问来源于stack exchange,提问作者Bl3akMirai
相关产品推荐
相关产品推荐

