Pobieranie pliku PDF za pomocą Selenium, Chrome i Python

Próbowałem śledzić poprzednie posty na ten temat takie jak te (post 1, post 2), ale i tak utknąłem.

Mój skrypt musi zalogować się do witryny za pomocą zestawu poświadczeń, a następnie przejść przez niektóre rozwijane menu, aby wybrać raport. Po wybraniu raportu wyskakuje nowe okno, w którym należy dostosować parametry, aby wygenerować raport. Po ustawieniu parametrów to samo wyskakujące okno odświeża się z wygenerowanym raportem w formacie PDF i jest wyświetlane przy użyciu wbudowanej przeglądarki PDF Chrome. Byłem pod wrażeniem, że przekazanie pewnych opcji do webdriver wyłączy tę przeglądarkę PDF i po prostu pobierze plik, ale przeglądarka PDF nadal jest wyświetlana i nic nie jest automatycznie pobierane. Na pewno coś przeoczyłem albo napisałem coś niepoprawnie. Oto jist mojego kodu:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_experimental_option('prefs',  {
    "download.default_directory": download_dir,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "plugins.plugins_disabled": ["Chrome PDF Viewer"]
    }
)

browser = webdriver.Chrome(options = chrome_options)

driver = webdriver.Chrome()
driver.get(url)

#In between here are a bunch of steps here that navigates through drop down menus

#This step may not be necessary, but I figured I'd include it to address when the pop up window refreshes and displays the report in PDF format through Chrome's PDF viewer
driver.switch_to.window(driver.window_handles[1])

W tym momencie Chrome nadal wyświetla przeglądarkę PDF, mimo że wcześniej ją wyłączyłem. Nic nie jest pobierane, więc jestem zastanawiam się, czy muszę podać inną linijkę kodu, czy może coś innego.

Używanie Selenium w wersji 3.141.0, Python 3.6.4, Chrome webdriver 2.45 na Windows 10.

Author: erik7970, 2019-01-01

2 answers

Musisz zastąpić "plugins.plugins_disabled": ["Chrome PDF Viewer"]

Z:

"plugins.always_open_pdf_externally": True
Mam nadzieję, że to ci pomoże!
 28
Author: Moshe Slavin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-21 20:59:37

Miałem podobny problem, który rozwiązałem ze sterownikiem Firefoksa w Javie. Oto Mój kod:

ffprofile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/pdf");
ffprofile.setPreference("browser.download.folderList", 2);
ffprofile.setPreference("browser.download.manager.showWhenStarting", false);
ffprofile.setPreference("browser.download.dir", "path/to/directory");
ffprofile.setPreference("plugin.scan.plid.all",false);
ffprofile.setPreference("plugin.scan.Acrobat","99.0");
ffprofile.setPreference("pdfjs.disabled",true);

Może dla Ciebie jest to opcja, aby użyć Firefoksa i Java - > Python tłumaczenie powinno być proste.

 2
Author: Volokh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-02 10:36:17