代码之家  ›  专栏  ›  技术社区  ›  Programer Beginner

Python Selenium检测浏览器何时关闭

  •  2
  • Programer Beginner  · 技术社区  · 8 年前

    while True:
        try:
            # do stuff
        except WebDriverException:
            print 'User closed the browser'
            exit()
    

    但我发现这是非常不可靠的,而且是一个非常糟糕的解决方案 WebDriverException 捕捉到很多异常(如果不是全部的话),并且大多数异常都不是由于用户关闭浏览器造成的。

    如何检测用户何时关闭浏览器?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Federico Rubbi    8 年前

    我建议使用:

    >>> driver.get_log('driver')
    [{'level': 'WARNING', 'message': 'Unable to evaluate script: disconnected: not connected to DevTools\n', 'timestamp': 1535095164185}]
    

    因为每当用户关闭浏览器窗口时,驱动程序都会记录这一点,所以这似乎是最具python风格的解决方案。

    所以你可以这样做:

    DISCONNECTED_MSG = 'Unable to evaluate script: disconnected: not connected to DevTools\n'
    
    while True:
        if driver.get_log('driver')[-1]['message'] == DISCONNECTED_MSG:
            print 'Browser window closed by user'
        time.sleep(1)
    

    here .

    我正在使用chromedriver 2.41和Chrome68。

        2
  •  3
  •   dasWesen    7 年前

    与Federico Rubbis的回答类似,这对我很有用:

    import selenium
    from selenium import webdriver
    browser = webdriver.Firefox()
    
    # Now wait if someone closes the window
    while True:
        try:
            _ = browser.window_handles
        except selenium.common.exceptions.InvalidSessionIdException as e:
            break
        time.sleep(1)
    
    # ... Put code here to be executed when the window is closed
    


    编辑:在不同环境中运行时甚至不稳定。丑陋的修正:使用 BaseException 而不是 selenium.common.exceptions.InvalidSessionIdException .