关闭在子进程中打开的Selenium浏览器

时间:2016-09-07 00:04:31

标签: python selenium webdriver queue multiprocessing

以下是这种情况:

我创建了一个打开并处理webdriver的子进程。子进程很挑剔并且可能出错,在这种情况下它会立即关闭,并且控制将返回到main函数。但是,在这种情况下,浏览器仍然会打开(因为子进程从未完全运行)。如何关闭在子进程中初始化的浏览器?

我到目前为止尝试过的方法:

1)在main函数中初始化webdriver并将其作为参数传递给子进程。

2)使用队列在子进程和父进程之间传递webdriver。

代码:

import multiprocessing

def foo(queue):
    driver = webdriver.Chrome()
    queue.put(driver)
    # Do some other stuff

    # If finicky stuff happens, this driver.close() will not run
    driver.close()

if __name__ == '__main__':

    queue = multiprocessing.Queue()
    p = multiprocessing.Process(target=foo, name='foo', args=(queue,))

    # Wait for process to finish

    # Try to close the browser if still open
    try:
        driver = queue.get()
        driver.close()
    except:
         pass

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

在foo()中,在打开新浏览器时获取webdriver的进程ID。将进程ID添加到队列中。然后在main函数中,添加time.sleep(60)等待一分钟,然后从队列中获取进程ID并使用try-except尝试关闭特定的进程ID。

如果在单独进程中运行的foo()挂起,则一分钟后将在main函数中关闭浏览器。