Selenium Chrome无头模式访问Instagram报TimeoutException如何解决?
问题原因&解决方案
1 修复配置参数错误
你当前配置里--disable-gpu参数的前缀是中文破折号,属于无效参数,同时旧版Chrome无头模式极易被站点检测拦截,首先修正基础配置:
- 将
"—disable-gpu"替换为英文前缀的"--disable-gpu" - 新版Chrome(112及以上)使用
--headless=new替换旧的--headless参数,该模式下浏览器表现和普通模式几乎完全一致,可绕过大部分基础检测
2 添加反检测配置
Instagram有完善的反自动化策略,无头模式下默认会携带webdriver特征标识,会被站点拦截导致登录页无法正常加载,需要添加以下配置隐藏自动化特征:
- 配置自定义UA(User-Agent),和你本地正常使用的Chrome UA保持一致
- 禁用自动化标识参数
修正后的完整Chrome配置代码如下:
from selenium.webdriver.chrome.options import Options from selenium import webdriver chrome_options = Options() # 新版无头模式 chrome_options.add_argument('--headless=new') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--disable-dev-shm-usage') # 配置自定义UA,可在普通Chrome地址栏输入chrome://version/查询自己的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') # 隐藏自动化特征 chrome_options.add_argument('--disable-blink-features=AutomationControlled') chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_driver = "C:\Program Files (x86)\chromedriver.exe" driver = webdriver.Chrome(executable_path=chrome_driver, options=chrome_options) driver.set_window_size(1382, 744) # 可选:执行CDP命令进一步抹除webdriver特征 driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})' })
3 可选优化(提升稳定性)
你当前使用的绝对路径XPath稳定性极低,页面结构稍有变化就会失效,建议替换为更稳定的相对路径定位:
# 用户名输入框定位 username = waiting('//input[@name="username"]') # 密码输入框定位 password = waiting('//input[@name="password"]') # 登录按钮定位 login_btn = waiting('//button[@type="submit"]')
如果修改后还是超时,可在driver.get("https://www.instagram.com")后添加截图代码,查看无头模式下实际返回的页面内容,确认是否被拦截到验证页:
driver.get("https://www.instagram.com") driver.save_screenshot('debug.png')
内容的提问来源于stack exchange,提问作者Madhav mishra
相关产品推荐
相关产品推荐

