是否有人知道是否可以使用Selenium Firefox WebDriver中的屏幕截图功能将HTML导出为PDF?我有一个网页,其中包含打印特定的CSS,我需要自动下载。据我所知,屏幕截图功能将页面截图作为图像,但我正在寻找一个可扩展的PDF文件,这对于打印很有用。
答案 0 :(得分:6)
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文件中设置图像。
答案 1 :(得分:1)
Webdriver不支持“导出为PDF”功能。
当你不受Firefox和Webdriver的约束时,phantomjs可能是另一种选择。 Phantomjs是一款无头浏览器,能够以PDF格式截取屏幕截图。 浏览器可以通过javascript直接控制。
答案 2 :(得分:0)
快速简便的方法是构建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()