代码之家  ›  专栏  ›  技术社区  ›  Chris

在函数中调用驱动程序时,如何在Python3中保持Selenium Webdriver浏览器打开?

  •  0
  • Chris  · 技术社区  · 6 年前

    功能如下

    def driver_open():
       mobile_emulation = {"deviceName": "iPhone 6"}
       chrome_options = webdriver.ChromeOptions()
       chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
       driver = webdriver.Chrome(r"C:\Users\vaio\Dropbox\PyCharmProjects\Nagora\chromedriver.exe",                       
       desired_capabilities=chrome_options.to_capabilities())
       driver.get("https://www.youtube.com/")
       return
    

    但是,如果我在函数外部运行同一段代码,浏览器将保持打开状态,就像下面这样的一个简单脚本:

    mobile_emulation = {"deviceName": "iPhone 6"}
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
    driver =webdriver.Chrome(r"C:\Users\vaio\Dropbox\PyCharmProjects\Nagora\chromedriver.exe",
                          desired_capabilities=chrome_options.to_capabilities())
    driver.get("https://www.google.com/")
    

    即使我在同一个python文件中运行这两段代码,Google页面浏览器也会保持打开状态(因为代码在函数或类之外),而YouTube页面在DOM完成加载时会自动关闭。

    我尝试了无数的解决方案,但没有一个奏效。

    1 回复  |  直到 6 年前
        1
  •  2
  •   AnkDasCo    6 年前

    函数定义以return关闭,因此驱动程序变量也会丢失,但是当您在函数之外执行此操作时,驱动程序定义仍处于打开状态。

    方法是在启动chromedriver时使用“detach”选项。

    chrome_options.add_experimental_option("detach", True)
    

    同样的功能也可以使用IDE断点来实现,但不推荐使用。