1

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


NotGood911
  • 57
  • 6
  • 1
    Does https://stackoverflow.com/questions/57599776/download-file-through-google-chrome-in-headless-mode answer your question? – abhigyanj Sep 27 '20 at 02:05
  • Tried implementing that into firefox and my machine would stall, any other possible solutions? – NotGood911 Sep 27 '20 at 02:20

1 Answers1

0

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)
Dharman
  • 30,962
  • 25
  • 85
  • 135
kyawswar
  • 106
  • 3