我必须从网站下载一些文件,我使用的是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实例。答案 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])