Selenium WebDriver测试在Linux服务器加载移动端页面问题求助
解决ChromeDriver在Linux服务器上加载移动端网页的问题
我之前在CI服务器上跑Selenium测试时也遇到过完全一样的坑!本地运行一切正常,到了Linux服务器上就自动切到移动端布局,元素全错位找不到。以下是我亲测有效的解决办法:
核心原因
Linux服务器上默认启动的ChromeDriver窗口尺寸非常小(大概默认是800x600),你的网页通过响应式布局识别为移动设备,自动加载了移动端版本,导致测试依赖的桌面端元素无法定位。
具体解决方案
1. 显式设置Chrome窗口尺寸
这是最直接有效的办法,启动Chrome时强制指定一个桌面级的窗口大小,比如1920x1080:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 服务器通常用headless模式,必须加上这两行参数避免启动失败 chrome_options.add_argument("--headless=new") chrome_options.add_argument("--no-sandbox") # 关键:设置固定桌面级窗口尺寸 chrome_options.add_argument("--window-size=1920,1080") driver = webdriver.Chrome(options=chrome_options)
注意:不要只依赖
driver.maximize_window(),在headless模式下这个方法经常不生效,显式设置尺寸更可靠。
2. 强制设置桌面端User-Agent(可选补充)
如果设置窗口尺寸后还是有问题,可以手动指定桌面Chrome的UA,避免网站通过UA识别为移动设备:
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")
3. 验证窗口尺寸是否生效
可以在测试代码里加一行打印,确认窗口尺寸是否正确设置:
print(driver.get_window_size())
如果输出是{'width': 1920, 'height': 1080},说明设置成功了。
额外提示
- 如果你用的是其他语言(比如Java、C#),对应的ChromeOptions设置逻辑是一样的,只是语法不同,核心都是添加
--window-size参数。 - 服务器上运行时记得给ChromeDriver足够的权限,
--no-sandbox参数在Linux环境下几乎是必须的,否则可能启动失败。
内容的提问来源于stack exchange,提问作者user964503
相关产品推荐
相关产品推荐

