0

Мне нужно загрузить некоторые файлы с веб-сайта, я использую Python - Selenium - Chrome - Osx.Закрытие всех открытых хромированных окон с использованием селена - python - 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 (я пытаюсь избежать запуска команды терминала, чтобы убить процессы перебор)?

EDIT:

как сказал Мукеш Takhtani в комментариях в моем коде проблема бессмысленно WebDriver экземпляра.

+1

Я считаю, что вы не нужна эта строка: CHROMEDRIVER = webdriver.Chrome(), вы можете попробовать комментируя это и запустить снова? –

+0

спасибо @ mukesh-takhtani, эта бесполезная линия была проблемой! – Hrabal

ответ

0

Используйте это. Это я использовал для Firefox. Вы можете использовать это для Chrome. Вызовите kill_waste() в вашем коде на Python, и он уничтожит бесполезный бесполезный Chrome. Обратите внимание, что это будет работать для OSX или FreeBSD. Для дистрибутивов вы должны изменить способ, которым Вы собираетесь использовать Grep и сократить

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]) 
+0

весь этот ответ можно заменить однострочным: '$ killall firefox' –

+0

Наблюдайте за тем, что я нахожу« I »или« I + »Firefox и убиваю их. Killall - отличный способ убить все – Tahseen

Смежные вопросы