我正在使用 selenium 的 chrome webdriver 打开一个网页,然后将该网页保存到本地驱动器上的文件位置。由于某种原因,脚本('window.print();')将打开“另存为网页”选项,但不会继续单击“打印”并将文件保存在本地。 JavaScript 似乎永远不会完成并且超时。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
chrome_options = Options()
chrome_options.add_argument("--disable-gpu")
pdf_path = "C:\\Test_Data\\output.pdf"
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com")
time.sleep(5)
driver.set_script_timeout(5)
driver.execute_script('window.print();')
time.sleep(5)
driver.quit()
我尝试增加超时时间,但它从未真正完成该过程。
如果不知道 OP 是否真的想要“打印到 PDF”或“保存到 PDF”(这在输出中存在巨大差异),那么 K J 的答案将是合适的。
如果你真的想坚持使用 selenium,你应该添加“implicitly_wait(number_of_seconds)”并添加“chrome_options.add_argument(“—kiosk-printing”)”。
隐式等待将等待您的“driver.get(“https://www.google.com”)”和“driver.execute_script('window.print();')”命令完成执行。另一个命令“ —-kiosk-printing”,它将自动为您单击打印按钮。出于某种原因,如果您在“driver.get”上遇到错误,只需为整个函数或仅为“driver.get”添加一个 try/ except命令。
我建议保留一些睡眠命令(可能甚至没有必要),但我还没有对大 pdf 文件进行大量测试,请注意。另外我应该指出在implicitly_wait命令中添加足够长的延迟,因为它只是一个超时而不是严格等待那么长的秒数。
如果您正在寻找“另存为 PDF”,请告诉我我也在研究解决方案,而且它几乎已经准备好了。