问题:Python Selenium 打印 Save-As-PDF 等待文件名输入

我正在尝试通过打印对话框将网站另存为 PDF。我的代码允许我保存为 pdf,但要求我输入一个文件名,我不知道如何将文件名传递给弹出框。附上我的代码:

import time
from selenium import webdriver
import os

class printing_browser(object):
    def __init__(self):
        self.profile = webdriver.FirefoxProfile()
        self.profile.set_preference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", False)
        self.profile.set_preference("pdfjs.disabled", True)
        self.profile.set_preference("print.always_print_silent", True)
        self.profile.set_preference("print.show_print_progress", False)
        self.profile.set_preference("browser.download.show_plugins_in_list",False)
        foxdriver = r'C:\Users\AShen\Documents\Workspace\geckodriver.exe'
        self.driver = webdriver.Firefox(executable_path=foxdriver,firefox_profile = self.profile)
        time.sleep(5)

    def get_page_and_print(self, page):
        self.driver.get(page)
        time.sleep(5)
        self.driver.execute_script("window.print();")

if __name__ == "__main__":
    browser_that_prints = printing_browser()
    browser_that_prints.get_page_and_print('http://www.google.com/')

解答

呵呵,知道pyautogui就很容易了。这是一个了不起的模块,可让您自动化您的光标。所以本质上,您需要弄清楚弹出窗口出现的位置并使用pyautogui为您单击它。您需要添加的是:

time.sleep(3)

i=random.randint(0,1000)
file_name=('name_pdf '+str(i))
print (file_name)


pyautogui.typewrite(file_name)
pyautogui.click(512,449)

整个代码结构将如下所示:

import time
import pyautogui
from selenium import webdriver
import os

class printing_browser(object):
    def __init__(self):
        self.profile = webdriver.FirefoxProfile()
        self.profile.set_preference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", False)
        self.profile.set_preference("pdfjs.disabled", True)
        self.profile.set_preference("print.always_print_silent", True)
        self.profile.set_preference("print.show_print_progress", False)
        self.profile.set_preference("browser.download.show_plugins_in_list",False)
        foxdriver = r'C:\Users\Pranjal Pathak\Desktop\Titanic Kaggle\geckodriver.exe'
        self.driver = webdriver.Firefox(executable_path=foxdriver,firefox_profile = self.profile)
        time.sleep(5)

    def get_page_and_print(self, page):
        self.driver.get(page)
        time.sleep(5)
        self.driver.execute_script("window.print();")

if __name__ == "__main__":
    browser_that_prints = printing_browser()
    browser_that_prints.get_page_and_print('http://www.python.org/')

time.sleep(3)

i=random.randint(0,1000)
file_name=('name_pdf '+str(i))
print (file_name)


pyautogui.typewrite(file_name)
pyautogui.click(512,449)

注意: 1.我选择了文件名作为名称+1到1000之间的任何随机整数,每次保存文件时都更改名称。这样,每次运行代码时它都会保存,因为每次名称都会不同。

  1. 如果这键入了名称但不保存文件,您可能需要更改光标的坐标。如果发生这种情况,请告诉我。
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐