You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium+Chromedriver爬取时如何自动关闭循环中弹出的窗口?

Selenium循环爬取弹出大量窗口解决方法

问题根源

你当前的代码每次循环都会重新初始化Chrome驱动实例,相当于每次循环都新开一个独立的浏览器窗口,循环执行多少次就会弹出多少个窗口,同时还会残留大量后台驱动进程占用资源。

解决方案

方案1:复用同一个浏览器窗口(最优推荐)

将浏览器初始化逻辑放到循环外部,全程只使用同一个窗口加载页面,无需反复新开窗口,运行效率更高也不会出现多窗口问题。
代码示例:

from selenium import webdriver
import time

# 浏览器初始化放在循环外面,全程只开1个窗口
browser = webdriver.Chrome(r'C:\Users\kinet\OneDrive\Documents\webscraper\chromedriver.exe')
i = 0
while i != 10:
    url = 'https://hytrack.me/'
    browser.get(url)
    time.sleep(10)
    text = browser.find_element_by_xpath('//*[@id="stat_totalPlayers"]').text
    print(text)
    i += 1
# 全部循环结束后再关闭浏览器
browser.quit()

方案2:每次循环结束关闭当前浏览器

如果业务需求确实需要每次循环都开全新的浏览器窗口,只需要在每次循环末尾添加browser.quit()方法,即可完全关闭当前浏览器窗口和对应的驱动进程,不会残留窗口。
代码示例:

from selenium import webdriver
import time
i = 0
while i != 10:
    url = 'https://hytrack.me/'
    browser = webdriver.Chrome(r'C:\Users\kinet\OneDrive\Documents\webscraper\chromedriver.exe')
    browser.get(url)
    time.sleep(10)

    text = browser.find_element_by_xpath('//*[@id="stat_totalPlayers"]').text
    print(text)
    # 每次循环结束直接关闭整个浏览器
    browser.quit()
    i += 1

补充说明

  • 注意区分browser.close()和browser.quit():前者仅关闭当前激活的标签页,不会结束浏览器驱动进程,依旧会残留后台进程占用资源;后者会完全关闭整个浏览器实例并终止对应驱动进程,是清理窗口的正确方法。
  • 如果你使用的是Selenium 4.0及以上版本,find_element_by_xpath方法已被弃用,可以替换为以下写法:
# 首先导入By类
from selenium.webdriver.common.by import By
# 替换原来的find_element_by_xpath写法
text = browser.find_element(By.XPATH, '//*[@id="stat_totalPlayers"]').text

内容的提问来源于stack exchange,提问作者kineticcat_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:18:05