Selenium Python使用Chrome浏览器时无法打开第二个页面问题求助
对应解决方案
1. 切换到正确的窗口句柄
如果第一次GET请求触发站点打开新标签页,Selenium默认不会自动切换操作上下文,后续的GET请求仍会作用在原有窗口上,若原有窗口已关闭就会触发报错。
参考实现代码:
# 每次打开新页面后获取所有窗口句柄,切换到最新的窗口 all_handles = driver.window_handles driver.switch_to.window(all_handles[-1])
2. 适配站点反爬策略
部分站点会校验请求频率、请求头完整性,拦截短时间内的多次访问请求。可通过以下配置优化:
- 初始化driver时添加user-agent伪装正常浏览器请求
- 两次GET请求之间添加1-3秒的延时,避免触发频率限制
- 开启无痕模式避免站点读取本地残留cookie限制访问,配置示例:
chrome_options.add_argument("--incognito")
3. 匹配Chrome与ChromeDriver版本
Chrome浏览器自动更新后,和原有ChromeDriver版本不兼容会导致多页面访问逻辑异常,可使用webdriver-manager自动管理驱动版本,无需手动下载对应版本:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
4. 等待页面加载完成再执行后续操作
前一个页面未完全加载就发起第二个GET请求,会导致驱动状态异常,建议使用显式等待等待核心元素加载完成后再执行后续操作:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 最长等待10秒,直到页面内id为content的元素加载完成 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "content")))
内容的提问来源于stack exchange,提问作者Mansi Atoliya
相关产品推荐
相关产品推荐

