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

时间:2014-01-19 13:03:36

标签: python firefox selenium selenium-webdriver

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

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()

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

4 个答案:

答案 0 :(得分:2)

您可能希望在关闭浏览器之前使用下面的代码。

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

browser.quit()

答案 1 :(得分:1)

您可以使用pause命令:

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()

答案 2 :(得分:1)

这是我在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();

答案 3 :(得分:0)

我使用的技巧是打开下载管理器页面,并期待一个表明下载已完成的元素。遵循使用的 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()

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