如何解决GitLab CI Docker中Selenium报错“请求的URL无法获取”
问题解决方案:GitLab CI Docker环境Selenium初始化触发Squid代理错误
错误根因
报错返回Squid代理页面,是因为Chrome初始化时触发的后台网络请求被容器内配置的全局代理拦截,代理无法访问对应外部接口导致驱动初始化失败。
修复方案
- 方案1:配置Chrome跳过代理
在现有Chrome参数中添加跳过代理的配置,所有请求直接访问不走全局代理:
chrome_options.add_argument("--proxy-bypass-list=*")
如果你的测试业务需要依赖代理访问目标页面,可以仅绕过本地及Selenium相关接口:
chrome_options.add_argument("--proxy-bypass-list=localhost,127.0.0.1,chromedriver.storage.googleapis.com,googleapis.com")
- 方案2:关闭Chrome多余后台网络请求
添加参数关闭Chrome非必要的后台请求,避免触发代理拦截:
# 关闭扩展 chrome_options.add_argument("--disable-extensions") # 关闭组件自动更新 chrome_options.add_argument("--disable-component-update") # 关闭后台网络请求 chrome_options.add_argument("--disable-background-networking") # 关闭账号同步 chrome_options.add_argument("--disable-sync") # 关闭自动翻译 chrome_options.add_argument("--disable-translate")
- 方案3:调整CI环境变量
在.gitlab-ci.yml的执行脚本中,添加本地地址不代理的环境变量配置:
test: script: - export NO_PROXY=localhost,127.0.0.1 - export no_proxy=localhost,127.0.0.1 - python your_test_script.py
修改后可运行的完整代码示例
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--start-maximized') # 新增修复参数 chrome_options.add_argument("--proxy-bypass-list=*") chrome_options.add_argument("--disable-extensions") chrome_options.add_argument("--disable-component-update") chrome_options.add_argument("--disable-background-networking") # 可显式指定chromedriver路径(根据镜像实际路径调整) driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=chrome_options) driver.quit()
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

