Selenium не использует опцию «--print-to-pdf» и печатает на сетевых принтерах - PullRequest
0 голосов
/ 09 июля 2019

Я создаю сценарий на основе Selenium, который посещает несколько веб-сайтов и загружает их непосредственно в PDF. В то время как я подключен к Wi-Fi в нашем офисе, браузер Chromium по умолчанию использует сетевой принтер, который он находит вместо настроенного мной параметра «pdf».

  1. Добавьте пользовательский набор настроек, чтобы указать Chromium на последние использованные параметры печати (pdf).
  2. Добавить аргументы Chrome --kiosk-printing и --print-to-pdf
  3. Переключился на другую сеть Wi-Fi без принтеров (это работает с аргументами!)

Я инициализирую веб-драйвер, используя:

def init_chromium():
    chrome_options = Options()
    chrome_options.add_argument("--kiosk-printing")
    chrome_options.add_argument("--print-to-pdf")
    chrome_driver = webdriver.Chrome(options=chrome_options)
    return chrome_driver

Затем я перебираю список посещаемых страниц и использую JS для печати страницы со специальной «меткой», которую предоставляет пользователь.

def page_navigation (driver, page_array, label):
    for i in page_array:
        print("Getting page {}".format(i))
        driver.get(i)
        driver.execute_script("document.title = '{}' + ' - ' + document.title".format(label))
        driver.execute_script("window.print();")
        print("Executed printing of {}.".format(i))

Сообщения об ошибках не появляются, но мне нужен способ переопределения конфигурации печати независимо от сети, в которой я нахожусь. Смена сетей Wi-Fi в начале / конце скрипта не идеальна.

1 Ответ

0 голосов
/ 10 июля 2019

После некоторого тестирования я заметил, что Chrome будет подбирать принтеры, расположенные в моей сети, и пытаться распечатать их независимо от того, настрою я их или нет, даже если я предоставлю свои собственные пользовательские конфигурации.Поскольку у нас есть «гостевая» сеть в офисе, я решил обойти эту проблему, запустив два подпроцесса до запуска скребка.

def check_network_and_printers():
    current_network=subprocess.run(["/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport", "-I"], capture_output=True)
    if "BAD NETWORK SSID" in str(current_network):
        logging.error("ERROR: This computer is connected to the BAD NETWORK SSID network.  Please switch to another network before re-running this program.")
        exit()
    current_printers=subprocess.run(["lpstat", "-s"], capture_output=True)
    if "No destinations added" not in str(current_printers):
            logging.error("ERROR:  Please remove any configured printers from your MacBook before running this script!")
            exit()

Не лучшее решение, но если принтеры не настроены, тогда Chromeпо умолчанию будет выбран параметр «Печать в PDF».Надеюсь, это поможет кому-то в будущем.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...