简体   繁体   中英

Downloading files with python using selenium on headless firefox (Ubuntu)

I'm trying to figure out a way for this script to download a file through headless firefox. I'm not seeing it appear in my download directory and I'm not getting any errors, can someone help me figure out how to actually download this file? This code works regularly when not done in headlessmode.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
import requests
from selenium.webdriver.firefox.options import Options as FirefoxOptions


options = FirefoxOptions()
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
driver.get('website')
sleep(2)
driver.maximize_window()
search = driver.find_element_by_id('UserName')
search.send_keys('username')
search = driver.find_element_by_id('Password')
search.send_keys('password')
search.send_keys(Keys.RETURN)
sleep(4)
driver.get('website')
sleep(8)

try:
    element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "ej2-datetimepicker_0_input"))
            )
    element.click
    link = driver.find_element_by_id('ej2-datetimepicker_0_input')
    link.click()
   
except:
    driver.quit()
driver.implicitly_wait(3)    
date = driver.find_element_by_xpath('//*[@id="ej2-datetimepicker_0_input"]')
date.clear()
date.send_keys('7/1/2020 - 8/24/2020')


sleep(3)
WebDriverWait(driver, 8).until(EC.element_to_be_clickable((By.XPATH, "//button[@mat-button]/span[@class='mat-button-wrapper']//span[text()='Excel']"))).click()
sleep(1)
print('done')


I also encountered the same problem. For my case, I was downloading the pdfs. Could you tried disabling the popup download dialog? The following worked for me.

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options


s = Service('./driver/geckodriver.exe')
download_dir = "download directory"

options = Options()
options.set_preference("pdfjs.disabled", True)
options.set_preference("browser.download.folderList", 2)
options.set_preference("browser.download.manager.useWindow", False)
options.set_preference("browser.download.dir", download_dir)
options.set_preference("browser.helperApps.neverAsk.saveToDisk", 
                       "application/pdf, application/force-download")
options.add_argument("--headless")
options.add_argument('--disable-gpu')
driver = webdriver.Firefox(service=s, options=options)

Hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM