【发布时间】:2016-02-15 00:02:01
【问题描述】:
有谁知道是否可以使用 Selenium Firefox WebDriver 中的屏幕截图功能将 HTML 导出为 PDF?我有一个网页,其中包含我需要自动下载的打印特定 css。我知道屏幕截图功能将页面的屏幕截图作为图像,但我正在寻找适合打印的可缩放 PDF 文件。
【问题讨论】:
标签: pdf selenium selenium-webdriver webdriver selenium-firefoxdriver
有谁知道是否可以使用 Selenium Firefox WebDriver 中的屏幕截图功能将 HTML 导出为 PDF?我有一个网页,其中包含我需要自动下载的打印特定 css。我知道屏幕截图功能将页面的屏幕截图作为图像,但我正在寻找适合打印的可缩放 PDF 文件。
【问题讨论】:
标签: pdf selenium selenium-webdriver webdriver selenium-firefoxdriver
Selenium 中的屏幕截图保存为 PNG。 PNG和PDF是不同的格式。所以 Selenium 不能将你的 HTML 页面图像直接保存为 PDF。
但是,您可以尝试插入 Selenium 拍摄的 PNG 屏幕截图并将其添加到 PDF。
检查this answer。基本上,您将需要一个库(如 itext)并执行以下操作:
// Take screenshot
driver.get("http://www.yourwebpage.com");
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshot, new File("screenshot.png"));
// Create the PDF
Document document = new Document(PageSize.A4, 20, 20, 20, 20);
PdfWriter.getInstance(document, new FileOutputStream("my_web.pdf"));
document.open();
Image image = Image.getInstance(getClass().getResource("screenshot.png"));
document.add(image);
document.close();
希望对你有帮助!
由于网络可能非常高,您可能需要查看the documentation 以了解您希望如何在 PDF 文件中设置图像。
【讨论】:
一种快速简便的方法是构建一个 HTML 文件并将图像嵌入为 base64 数据。然后,您可以使用任何转换器将文档转换为 PDF。
Python 示例:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.google.co.uk");
# open new file
file = open(r"C:\temp\captures.html", "w")
file.write("<!DOCTYPE html><html><head></head><body width=\"600px\">")
# write image
file.write("<img src=\"data:image/png;base64,")
file.write(driver.get_screenshot_as_base64())
file.write("\">")
# close file
file.write("</body></html>")
file.close()
driver.quit()
【讨论】:
Webdriver 不支持“导出为 PDF”功能。
当您没有绑定到 Firefox 和 Webdriver 时,phantomjs 可能是一种替代方案。 Phantomjs 是一款无头浏览器,能够将屏幕截图转换为 PDF。 浏览器可以直接通过javascript控制。
【讨论】: