使用selenium-python-osx关闭所有打开的镀铬窗口

时间:2016-01-07 23:21:35

标签: python google-chrome selenium selenium-webdriver selenium-chromedriver

我必须从网站下载一些文件,我使用的是Python - Selenium - Chrome - Osx。

到目前为止,我有他的代码:

lnk = "www.foobar.com"
CHROMEDRIVER=webdriver.Chrome()
options = webdriver.ChromeOptions()
profile = {"plugins.plugins_list": [{"enabled":False, "name":"Chrome PDF Viewer"}],
        "download.default_directory" : TEMP_DOWNLOAD}
options.add_experimental_option("prefs",profile)
driver = webdriver.Chrome(chrome_options = options)
driver.get(lnk)
while True:
    if filter(os.path.isfile, glob.glob(TEMP_DOWNLOAD+'/*.crdownload')):
        pass
    else:
        break
driver.quit()

此代码开始下载文件,等待下载结束,然后关闭webdriver。

除了可以打开2个Chrome窗口,一个打开链接,另一个打开文件,而且quit()方法只关闭后者时,一切正常。

有没有办法杀死Selenium打开的所有窗口(我试图避免触发终端命令来杀死进程暴力)?

编辑:

正如Mukesh Takhtani在我的代码评论中所说,这个问题是一个毫无意义的webdriver实例。

1 个答案:

答案 0 :(得分:0)

使用它。这个我用于Firefox。您可以将此用于Chrome。在您的python代码中调用kill_waste(),它会杀死闲置无用的Chrome。请注意,这适用于OSX或FreeBSD。对于Linux发行版,您将不得不改变使用grep和cut

的方式
import commands

def kill_waste():

    (_,firefox_processes) = commands.getstatusoutput("ps -ax | grep '/usr/local/bin/firefox -foreground' | cut -c1-24")
    sleep(0.5)
    firefox_processes = firefox_processes.splitlines()

    for pid in firefox_processes:
        values = pid.split()
        time_value = values[3].split(':')

        if ((values[2] == 'I' or values[2] == 'I+') and time_value[0] == '1') or time_value[0] == '2':
            commands.getstatusoutput("kill -9 " + values[0])