I'm trying to download a file with selenium. I've searched everything.
At How to control the download of files with Selenium Python bindings in Chrome some people told that it worked. But it didn't worked for me! Maybe I miss something? The only things differentlly is that my page autostarted download the csv file.
After studying the chrome codes I added:
"safebrowsing_for_trusted_sources_enabled": False
But still id didn't worked.
options = Options()
options.add_argument("--disable-notifications")
options.add_argument('--no-sandbox')
options.add_experimental_option("prefs", {
"download.default_directory": "C:\\Users\\claudiu.ivanescu\\Downloads",
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing_for_trusted_sources_enabled": False
})
options.add_argument('--disable-gpu')
options.add_argument('--disable-software-rasterizer')
options.add_argument('--headless')
Thank for support
A headless browser is a web browser without a user interface, it means the browser is running in the background (invisbile). This is great if you want to start a web browser to do tasks, but you don't want or need to see it.
Yes, Selenium supports headless testing. In older versions of Selenium, we used the HTMLUnitDriver mainly, a headless driver providing a Non-GUI implementation of Selenium WebDriver.
If anybody interested, after 2 days of search :). I manage to make it works!
I found the answer the bug tracking in this comment: https://bugs.chromium.org/p/chromium/issues/detail?id=696481#c86
The code I used is:
def enable_download_headless(browser,download_dir):
browser.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd':'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}}
browser.execute("send_command", params)
if __name__ == '__main__':
options = Options()
options.add_argument("--disable-notifications")
options.add_argument('--no-sandbox')
options.add_argument('--verbose')
options.add_experimental_option("prefs", {
"download.default_directory": "C:\\tmp",
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing_for_trusted_sources_enabled": False,
"safebrowsing.enabled": False
})
options.add_argument('--disable-gpu')
options.add_argument('--disable-software-rasterizer')
options.add_argument('--headless')
driver_path = "C:\\Users\\tmp\\chromedriver.exe"
driver = webdriver.Chrome(driver_path, chrome_options=options)
enable_download_headless(driver, "C:/tmp")
driver.get(url)
Maybe will be some use to others in the future... Probably is a lot of useless things inside, but didn't have time yet to change :).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With