Selenium中webdriver.get()方法不稳定问题求助
我之前也碰到过一模一样的问题——明明浏览器窗口打开了,URL栏也显示了目标地址,但页面就是一片空白,不管是简单脚本还是带代理的场景都偶尔发作。折腾了好一阵,总结出几个有效的解决办法,你可以挨个试试:
用显式等待替代固定sleep:
单纯的time.sleep()太死板,有时候浏览器虽然打开了,但DOM还没渲染完成。试试显式等待页面上的关键元素加载出来,比如谷歌的搜索框:from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC chrome = webdriver.Chrome() # 设置最多等待10秒 wait = WebDriverWait(chrome, 10) chrome.get("https://www.google.com") # 等待搜索框出现,确认页面真的加载完成 wait.until(EC.presence_of_element_located((By.NAME, "q")))这种方式能确保脚本继续执行前,页面已经处于可交互状态,而不是停留在URL显示的阶段。
调整Chrome启动参数,避免渲染阻塞:
给Chrome加几个参数,禁用一些可能干扰页面加载的特性:from selenium import webdriver chrome_options = webdriver.ChromeOptions() # 禁用GPU加速,部分环境下会导致渲染异常 chrome_options.add_argument('--disable-gpu') # 禁用沙箱模式,解决部分系统权限引发的空白问题 chrome_options.add_argument('--no-sandbox') # 禁用所有扩展,排除扩展干扰 chrome_options.add_argument('--disable-extensions') # 如果不需要可视化,可以试试无头模式(新版本用--headless=new) # chrome_options.add_argument('--headless=new') chrome = webdriver.Chrome(options=chrome_options) chrome.get("https://www.google.com")优先检查ChromeDriver和Chrome版本匹配:
这是最容易踩坑的点!ChromeDriver的版本必须和你本地安装的Chrome浏览器大版本完全一致(比如Chrome 118.x对应ChromeDriver 118.x.x)。版本不匹配会导致各种奇怪的加载问题,包括页面空白。你可以在Chrome的「设置-关于Chrome」里看版本,然后下载对应版本的ChromeDriver替换当前的。代理场景的额外配置:
如果用代理,除了--proxy-server,还要注意这些:- 先手动用浏览器挂这个代理访问目标网站,确认代理本身是可用的
- 加上证书忽略参数,避免代理证书问题导致加载失败:
chrome_options.add_argument('--ignore-certificate-errors') - 代理地址要明确协议,比如
http://xxx.xxx.xxx.xxx:port,不要只写IP和端口
修改页面加载策略:
默认的加载策略是等待页面所有资源加载完成(normal),有些网站可能有慢资源阻塞加载。改成eager(等待DOM加载完成就继续)或者none(立即返回,自己控制等待):chrome_options.page_load_strategy = 'eager' # 或者 chrome_options.page_load_strategy = 'none'每次启动干净的浏览器环境:
旧的缓存或用户数据可能干扰加载,每次启动时指定一个临时的用户数据目录:import tempfile from selenium import webdriver chrome_options = webdriver.ChromeOptions() # 创建临时目录 temp_dir = tempfile.mkdtemp() chrome_options.add_argument(f'--user-data-dir={temp_dir}') chrome = webdriver.Chrome(options=chrome_options) chrome.get("https://www.google.com")
我当时就是版本不匹配加显式等待没做好导致的问题,调整后基本没再出现过空白情况。你可以先从版本检查开始,这个解决的概率最高。
内容的提问来源于stack exchange,提问作者StyleZ

