使用Selenium Webdriver屏幕截图导出为PDF

时间:2015-11-13 11:53:22

标签: pdf selenium selenium-webdriver webdriver selenium-firefoxdriver

是否有人知道是否可以使用Selenium Firefox WebDriver中的屏幕截图功能将HTML导出为PDF?我有一个网页,其中包含打印特定的CSS,我需要自动下载。据我所知,屏幕截图功能将页面截图作为图像,但我正在寻找一个可扩展的PDF文件,这对于打印很有用。

3 个答案:

答案 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直接控制。

示例:http://phantomjs.org/screen-capture.html

答案 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()