能否在单个脚本中用同一driver对象调用driver.get()访问不同URL?
Selenium复用Driver时浏览器异常关闭的问题分析与解决
可能的原因
- 原页面存在自动关闭逻辑:你爬取的主页面可能包含前端脚本,比如定时器触发
window.close(),或者反爬机制检测到自动化工具后主动终止浏览器会话,导致原Driver实例失效。 - Driver会话意外终止:在爬取子分类链接的过程中,原页面可能发生了意外跳转、刷新,或者元素查找时出现未捕获的异常,导致Driver会话被静默终止,后续调用
get()自然无响应。 - 版本不兼容:Chrome浏览器与ChromeDriver版本不匹配,会导致会话稳定性下降,复用Driver时容易触发崩溃。
解决方案
- 排查原页面的自动关闭行为:手动打开主页面,观察是否会自动关闭;或者打开浏览器开发者工具(F12)查看Console面板,检查是否有执行关闭操作的脚本。
- 检查Driver会话状态:在调用新链接前,先验证Driver是否还存活:
try: # 尝试获取当前页面标题,判断会话是否有效 print(driver.title) driver.get(links[0]) except Exception as e: print(f"Driver会话异常:{str(e)}")
- 匹配Chrome与ChromeDriver版本:确保两者版本完全一致(比如Chrome是118.x,ChromeDriver也要对应118.x版本),避免版本不兼容导致的崩溃。
- 优化Driver复用方式:爬取完主页面链接后,先清除Cookie或导航到空白页,再跳转新链接:
# 清除原页面Cookie driver.delete_all_cookies() # 或者先跳转到空白页 driver.get("about:blank") # 再访问新链接 driver.get(links[0])
是否必须新建Driver?
完全不需要。复用同一个Driver实例才是更高效的做法——新建多个Driver会占用更多系统资源(每个Driver对应一个独立的浏览器进程),还更容易被网站反爬机制识别。只有当原Driver会话确实无法恢复时,才需要考虑新建实例。
你的可运行代码
main_page = 'https://www.*******.com/gaming' PATH = 'C:\\Program Files (x86)\\chromedriver.exe' driver = webdriver.Chrome(PATH) driver.get(main_page) sub_categories = driver.find_elements(By.CLASS_NAME, 'list-nav- item.context-nav-link') links = [] for el in sub_categories: links.append(el.get_attribute('href')) new_driver = webdriver.Chrome(PATH) new_driver.get(links[0]) #going to 1st link obtained
内容的提问来源于stack exchange,提问作者densol96
相关产品推荐
相关产品推荐

