【问题标题】:How to close the browser after completing a download?下载完成后如何关闭浏览器?
【发布时间】:2014-02-08 14:59:12
【问题描述】:

下载完成后如何关闭浏览器?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()
browser.get(any_url)
browser.find_elements_by_xpath('//input[@value="Download"]').click()

# The program start downloading now.

# HERE WHAT IS THE CODE?

browser.quit()

我只想在完成下载后关闭浏览器。

【问题讨论】:

    标签: python firefox selenium selenium-webdriver


    【解决方案1】:

    我使用的技巧是打开下载管理器页面并期待一个指示下载完成的元素。按照使用的 Python 代码:

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    ...
    
    # Wait until the download finish. This code just works for one single download at time on Firefox.
    # browser.execute_script('window.open();')
    # ActionChains(browser).key_down(Keys.COMMAND).send_keys('t').key_up(Keys.COMMAND).perform()
    browser.get('about:downloads')
    # files = browser.find_elements_by_class_name('download-state')
    WebDriverWait(browser, URL_LOAD_TIMEOUT).until(EC.presence_of_element_located((By.CLASS_NAME, 'downloadIconShow')))
    # 'downloadIconCancel'
    
    browser.close()
    broswer.quit()
    

    这种方法的问题在于,如果 Mozilla 更改下载管理器页面,它可能依赖于 Firefox 版本。

    【讨论】:

      【解决方案2】:

      您可能想在关闭浏览器之前使用以下代码。

      time.sleep(5)# 在关闭浏览器之前给时间完成任务。你 可以将秒数增加到 10 或 15,基本上是时间量 需要下载,否则进入下一步 马上。

      browser.quit()
      

      【讨论】:

        【解决方案3】:

        这是我在 C# 上做的另一种方法。也许您可以使用相同的技术并将其应用于 python。

        public static string GetRequest(string url, bool isBinary = false) {
            // binary is the file that will be downloaded
            // Here you perform asynchronous get request and download the binary
            // Python guide for GetRequest -> http://docs.python-requests.org/en/latest/user/quickstart/
        }
        
        browser.webdriver.Firefox();
        browser.get(any_url);
        elem = browser.findElement("locator");
        GetRequest(elem.getAttribute('href'), true); // when this method is done, you expect the get request is done
        browser.quit();
        

        【讨论】:

          【解决方案4】:

          你可以使用暂停命令:

          pause ( waitTime )
          

          等待指定的时间(以毫秒为单位)

          http://release.seleniumhq.org/selenium-core/1.0/reference.html#pause

          from selenium import webdriver
          from selenium.webdriver.common.keys import Keys
          
          browser = webdriver.Firefox()
          browser.get(any_url)
          browser.find_elements_by_xpath('//input[@value="Download"]').click()
          
          # The program start downloading now.
          
          pause (10000) # pause/sleeps for 10 seconds
          
          browser.quit()
          

          【讨论】:

          • 我只想在完成下载后关闭浏览器。 @Tuga
          • 您的代码不是假设文件下载在 10 秒内完成吗? @Tuga
          • 我是,需要的话加一下。
          猜你喜欢
          • 1970-01-01
          • 2012-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-11
          • 1970-01-01
          • 2023-03-26
          相关资源
          最近更新 更多