如何使用 Selenium 產生 PDF
1. 概述
在本教學中,我們將探索如何使用 Selenium 4 的ChromeDriver
類別中提供的print()
print()
從網頁產生 PDF 檔案。
我們將了解如何使用 Chrome 和 Firefox 瀏覽器產生 PDF,並示範如何使用PrintOptions
類別自訂 PDF 輸出。這包括調整方向、頁面大小、比例和邊距等參數,以根據特定要求自訂 PDF。
此外,我們的實際範例將涉及使用 Java 和 JUnit 測試列印網頁內容。
2. 設定和配置
設定環境需要兩個相依性: Selenium Java和WebDriverManager 。 Selenium Java 提供了必要的自動化框架,以程式設計方式與 Web 瀏覽器互動並控制 Web 瀏覽器。
WebDriverManager 透過自動處理瀏覽器驅動程式的下載和設定來簡化瀏覽器驅動程式的管理。此設定對於順利執行我們的自動化測試和 Web 互動至關重要。
讓我們新增 Maven 依賴項:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.23.1</version>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.8.0</version>
dependency>
3. 使用 Chrome 和 Selenium 產生 PDF
在本節中,我們將展示如何使用 Selenium WebDriver 和 Chrome 將網頁轉換為 PDF 檔案。我們的目標是捕獲Baeldung 的 Java 每週更新內容並將其儲存為 PDF 文件。
讓我們寫一個 JUnit 測試,在專案的根目錄中建立一個名為Baeldung_Weekly.pdf
的 PDF 檔案:
@Test
public void whenNavigatingToBaeldung_thenPDFIsGenerated() throws IOException {
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baeldung.com/library/java-web-weekly");
Pdf pdf = driver.print(new PrintOptions());
byte[] pdfContent = Base64.getDecoder().decode(pdf.getContent());
Files.write(Paths.get("./Baeldung_Weekly.pdf"), pdfContent);
assertTrue(Files.exists(Paths.get("./Baeldung_Weekly.pdf")), "PDF file should be created");
driver.quit();
}
執行測試後, ChromeDriver
開啟網頁並使用print()
方法建立 PDF。系統解碼 Base64 編碼的 PDF 並將其儲存為Baeldung_Weekly.pdf
。然後它會檢查文件是否存在以確認 PDF 生成成功。最後,使用driver.quit()
方法關閉瀏覽器.
關閉瀏覽器始終很重要,以確保沒有資源被掛起。
此外,即使 Chrome 在無頭模式(即瀏覽器在沒有 GUI 的情況下運行的模式)下運行, print()
方法也可以無縫運行。
我們可以使用options.addArguments(“–headless”)
方法啟用無頭模式,以便在沒有 GUI 的情況下在背景執行瀏覽器:
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver driver = new ChromeDriver(options);
4. 使用 Firefox 和 Selenium 產生 PDF
Firefox 瀏覽器也支援print()
方法。讓我們探討如何使用 Firefox 和 Selenium WebDriver 自動產生 PDF。與之前一樣,目標是捕獲 URL 中提供的頁面並使用 Firefox 將其儲存為 PDF 文件。
讓我們寫一個 JUnit 測試,在專案的目前目錄中產生一個名為Firefox_Weekly.pdf
的 PDF 檔案:
@Test
public void whenNavigatingToBaeldungWithFirefox_thenPDFIsGenerated() throws IOException {
FirefoxDriver driver = new FirefoxDriver(new FirefoxOptions());
driver.get("https://www.baeldung.com/library/java-web-weekly");
Pdf pdf = driver.print(new PrintOptions());
byte[] pdfContent = Base64.getDecoder().decode(pdf.getContent());
Files.write(Paths.get("./Firefox_Weekly.pdf"), pdfContent);
assertTrue(Files.exists(Paths.get("./Firefox_Weekly.pdf")), "PDF file should be created");
driver.quit();
}
執行測試時會啟動 FirefoxDriver,該驅動程式將開啟並導航至指定的網址。然後print()
方法從網頁產生 PDF。系統以 Base64 對生成的 PDF 進行編碼,將其解碼為二進位格式,並將其儲存為Firefox_Weekly.pdf.
該測試透過檢查檔案系統中的存在來確認 PDF 的建立。此驗證可確保我們使用 Firefox 瀏覽器成功從網頁產生 PDF 檔案。
5. 使用PrintOptions
自訂 PDF 輸出
當使用print()
方法時,我們可以決定輸出 PDF 文件的外觀。在本節中,我們將了解如何透過使用PrintOptions
類別自訂 PDF 輸出來增強 Selenium WebDriver 中print()
方法的功能。
PrintOptions
類別是 Selenium API 的一部分,允許在渲染為 PDF 時對網頁進行詳細調整。讓我們了解PrintOptions
提供的眾多選項中的一些 - 方向、頁面大小、比例和邊距:
PrintOptions options = new PrintOptions();
options.setOrientation(PrintOptions.Orientation.LANDSCAPE);
options.setScale(1.5);
options.setPageSize(new PageSize(100, 100));
options.setPageMargin(new PageMargin(2, 2, 2, 2));
Pdf pdf = driver.print(options);
在程式碼片段中, PrintOptions
類別自訂print()
方法產生的 PDF 輸出。 setOrientation()
設定頁面方向, setScale()
調整內容大小, setPageSize()
指定自訂頁面大小, setPageMargin()
定義每邊的邊距。
六、結論
在本文中,我們介紹如何使用 Selenium 4 的print()
方法從網頁產生 PDF 檔案。我們透過在 Chrome 和 Firefox 上嘗試print()
展示了跨不同平台實現相同功能的能力。
此外,我們還探索了透過PrintOptions
類別提供的自訂選項,該選項允許自訂輸出 PDF 文件以滿足特定要求。
有關程式碼的詳細實現,請隨時存取GitHub 上的儲存庫。