PythonAnywhere上Selenium脚本无法运行,Chrome驱动报错求助
解决PythonAnywhere上Selenium Chrome脚本运行失败的问题
问题根源
PythonAnywhere是无图形界面的云托管环境,直接套用本地Chrome的配置会因缺少显示环境、路径不匹配等原因报错,必须针对平台特性做适配。
分步修复方案
强制启用Chrome无头模式并指定平台Chrome路径
必须给ChromeOptions添加以下关键参数,否则无法在无头环境正常运行:from selenium.webdriver.chrome.options import Options chrome_options = Options() # 核心无头模式参数 chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") # 指定PythonAnywhere预装的Chrome二进制文件路径,不能用本地路径 chrome_options.binary_location = "/usr/bin/google-chrome"正确配置ChromeDriver
推荐用webdriver-manager自动匹配适配的ChromeDriver版本,避免手动指定路径出现版本不兼容问题:from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager # 自动安装对应版本的ChromeDriver chrome_service = Service(ChromeDriverManager().install()) # 初始化driver driver = webdriver.Chrome(options=chrome_options, service=chrome_service)调整依赖版本
不要再使用老旧的Selenium 4.1.3,PythonAnywhere的预装Chrome版本和旧版Selenium可能存在兼容性冲突,直接安装最新兼容版:# 全局环境执行 pip install --user selenium webdriver-manager # 虚拟环境下直接执行 pip install selenium webdriver-manager排查额外报错点
- 不要调用
driver.maximize_window(),无头模式下该操作会报错,换成设置窗口大小:chrome_options.add_argument("--window-size=1920,1080") - 如果访问目标网站被拦截,添加模拟浏览器的User-Agent:
chrome_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")
- 不要调用
验证测试脚本
先运行这段极简脚本确认环境正常:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") chrome_options.binary_location = "/usr/bin/google-chrome" driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) driver.get("https://www.google.com") print(driver.title) driver.quit()
内容的提问来源于stack exchange,提问作者Mustafa Elshaarawy
相关产品推荐
相关产品推荐

