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

Selenium导入Python模块时重复创建浏览器窗口的解决方法

解决爬虫模块重复实例化浏览器的问题

避免重复打开浏览器的两种方案

方案1:将浏览器实例作为参数传入模块函数

这是最直接的方式,在主程序中初始化一次浏览器,然后把实例传递给各个模块的函数使用:

  • 修改main.py,先初始化浏览器实例,再调用模块函数时传入:

    from selenium import webdriver
    import navigate_home_page
    
    # 仅初始化一次Chrome浏览器
    driver = webdriver.Chrome()
    
    # 把已有的driver实例传给导航函数
    navigate_home_page.go_to_target_site(driver)
    
  • 修改navigate_home_page.py,让函数接收driver参数:

    def go_to_target_site(driver):
        # 直接使用传入的浏览器实例导航,不会新开窗口
        driver.get("https://你要爬的电商网站域名")
    

方案2:用单例模式统一管理浏览器实例

如果不想每次传参,可以封装一个单例类,确保全局只有一个浏览器实例:

  • 新建browser_manager.py模块,实现单例逻辑:

    from selenium import webdriver
    
    class BrowserManager:
        _driver_instance = None
    
        @classmethod
        def get_driver(cls):
            if cls._driver_instance is None:
                cls._driver_instance = webdriver.Chrome()
            return cls._driver_instance
    
  • 在navigate_home_page.py中调用单例类获取浏览器:

    from browser_manager import BrowserManager
    
    def go_to_target_site():
        driver = BrowserManager.get_driver()
        driver.get("https://你要爬的电商网站域名")
    
  • main.py中直接调用函数即可,无需自己初始化:

    import navigate_home_page
    
    # 第一次调用会初始化浏览器,后续调用复用已有实例
    navigate_home_page.go_to_target_site()
    

关于模块化开发的结论

完全不需要编写单文件重复代码,模块化开发是更合理的选择。你可以继续把爬虫拆分为导航、价格采集、数据存储、定时任务等独立模块,通过上述两种方式共享浏览器实例,既保证代码复用,又避免重复初始化浏览器导致的资源浪费和效率问题。

内容的提问来源于stack exchange,提问作者Just doing my best

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:10:50