Ubuntu系统下Selenium ChromeDriver页面持续加载无响应问题求助
问题排查&解决步骤
- 核对Chrome浏览器与ChromeDriver版本匹配性
这是该类问题最高发的原因,Selenium要求二者大版本号完全一致。分别执行以下命令查看版本:
# 查看Chrome浏览器版本 google-chrome --version # 查看ChromeDriver版本 chromedriver --version若版本不匹配,卸载当前不匹配的ChromeDriver,下载与本地Chrome版本对应的安装包部署即可。
- 核对Chrome浏览器与ChromeDriver版本匹配性
- 补充缺失的Chrome启动参数
Ubuntu环境下运行Chrome默认会占用/dev/shm共享内存,空间不足时会导致加载卡顿,需要添加禁用参数;同时如果访问外网需要代理,Selenium启动的纯净Chrome实例不会继承手动打开浏览器的代理配置,需要手动指定:
# 禁用共享内存占用 chrome_options.add_argument('--disable-dev-shm-usage') # 禁用GPU加速,避免渲染异常 chrome_options.add_argument('--disable-gpu') # 若需要代理访问目标站点,补充代理配置 # chrome_options.add_argument('--proxy-server=http://你的代理地址:端口')- 补充缺失的Chrome启动参数
- 调整页面加载策略
Selenium默认的normal加载策略会等待页面所有资源(图片、CSS、JS、异步请求等)全部加载完成才会返回,若有资源加载阻塞就会一直卡顿,可以调整为eager策略,仅等待DOM树加载完成就返回:
chrome_options.page_load_strategy = 'eager'- 调整页面加载策略
- 添加超时配置,方便定位问题
给页面加载设置超时阈值,避免程序无限等待,超时后抛出异常方便进一步排查:
driver = webdriver.Chrome(service=ch_ser,options=chrome_options) # 设置页面加载最长等待30秒 driver.set_page_load_timeout(30)- 添加超时配置,方便定位问题
- 核对ChromeDriver执行权限
执行以下命令给ChromeDriver添加可执行权限:
sudo chmod +x /usr/bin/chromedriver- 核对ChromeDriver执行权限
调整后完整示例代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service ch_ser=Service(executable_path='/usr/bin/chromedriver') chrome_options = Options() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-extensions') # 新增修复参数 chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--disable-gpu') chrome_options.page_load_strategy = 'eager' # 如有需要补充代理参数 # chrome_options.add_argument('--proxy-server=http://127.0.0.1:7890') driver = webdriver.Chrome(service=ch_ser,options=chrome_options) driver.set_page_load_timeout(30) driver.get('https://google.com')
内容的提问来源于stack exchange,提问作者Ayaz49
相关产品推荐
相关产品推荐

