Сохраните PDF, открытый в браузере, используя Selenium - PullRequest
0 голосов
/ 06 сентября 2018

Итак, я захожу в веб-приложение, принадлежащее моей компании, и запускаю запрос на создание PDF, все это делается на python с использованием драйвера Internet Explorer. Я могу использовать IE только потому, что система компании не работает с любым другим браузером.

Как только я отправляю запрос, появляется новое окно IE с файлом PDF, который я запросил. Я хотел бы сохранить файл PDF на моем компьютере. Я понимаю, что работать с загрузками в IE нелегко, но должен быть способ сделать это. Я также могу сохранить его в формате png или в любом другом формате, но pdf длинный (обычно занимает 2-5 страниц), поэтому экран печати или снимок экрана не будут работать.

Любые предложения о том, что я могу сделать?

Ниже приведен простой фрагмент кода:

driver.implicitly_wait(5)

driver.find_element_by_name("invNumSrchTxt_H").send_keys("ABCDE")  #sending the parameters I need
driver.find_element_by_name("invDt_B").clear()  # Clearing out some preset params
driver.find_element_by_name("invDt_A").clear()


 # This is where I click the button and this pops open a new IE window with my pdf file in it.
 s=driver.find_element_by_name("Print_Invoice")
 s.click()

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете отправить запрос напрямую, используя запросы , поскольку IE не поддерживает настройку параметров, и вы должны обработать всплывающее окно.

Возможная реализация может быть:

import requests


def download_pdf_file(url, filename=None, download_dir=None):
    """
    Download pdf file in url,
    save it in download_dir as filename.
    """
    if download_dir is None: # set default download directory
        download_dir = r'C:\Users\{}\Downloads'.format(os.getlogin())

    if filename is None: # set default filename available
        index = 1
        while os.path.isfile(os.path.join(download_dir, f'pdf_{index}')):
            index += 1
        filename = os.path.join(download_dir, f'pdf_{index}')

    response = requests.get(url) # get pdf data
    with open(os.path.join(download_dir, filename), 'wb') as pdf_file:
        pdf_file.write(response.content) # save it in new file


driver.implicitly_wait(5)

driver.find_element_by_name("invNumSrchTxt_H").send_keys("ABCDE")  #sending the parameters I need
driver.find_element_by_name("invDt_B").clear()  # Clearing out some preset params
driver.find_element_by_name("invDt_A").clear()


# This is where I click the button and this pops open a new IE window with my pdf file in it.
s=driver.find_element_by_name("Print_Invoice")
s.click()

driver.download_pdf_file = download_pdf_file

driver.download_pdf_file(driver.current_url, # pdf url of the new tab
                  filename='myfile.pdf', # custom filename
                  download_dir='') # relative path to local directory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...