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

时间:2018-08-19 15:52:48

标签: python-3.x selenium selenium-webdriver browser

我遇到一个奇怪的问题,即如果代码在函数或类中,则无法保持打开Chrome Webdriver。即使我没有在驱动程序上调用quit()函数。

这是功能

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页面浏览器仍保持打开状态(因为代码在函数或类之外),而DOM完成加载后,YouTube页面会自动关闭。

我尝试了无数解决方案,但是没有一个起作用。

1 个答案:

答案 0 :(得分:1)

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

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

根据您的情况添加:

chrome_options.add_experimental_option("detach", True)

使用IDE断点也可以实现相同的功能,尽管不建议这样做。