C#Selenium正在保存pdf页面

如何直接在pdf中执行保存此页面? 我知道selenium无法控制chrome对话框……还有另外一种方法吗?

图像: 以pdf格式保存的页面

您可以直接将请求发送到不包含Selenium的URL,并获取包含PDF文件内容的字节数组。 之后,您可以使用某些PDF库读取文件内容(看起来像ITextSharp很受欢迎)。

在Chrome浏览器中,所有对话框弹出窗口都是html页面,因此您可以使用Selenium单击它们。 在您的情况下,您可以导航到页面,模拟按Ctrl + P键盘按钮,切换到打印对话框窗口,单击更改按钮更改打印机,单击保存到PDF,单击保存按钮,当显示“另存为”框时 – 模拟输入键盘按钮按下实际保存文件。 我不做C#,但这是在Java中的样子,事实上我已经测试了它,它确实有效:

Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_CONTROL); robot.keyPress(KeyEvent.VK_P); robot.keyRelease(KeyEvent.VK_P); robot.keyRelease(KeyEvent.VK_CONTROL); // get current browser window handles and switch to window with handle that is last in the list Set windowHandles = driver.getWindowHandles(); for (String handle : windowHandles) { driver.switchTo().window(handle); } driver.findElement(By.xpath("//button[contains(text(), 'Change')]")).click(); driver.findElement(By.xpath("//span[contains(text(), 'Save as PDF')]")).click(); driver.findElement(By.xpath("//button[contains(text(), 'Save')]")).click(); // you might need to add waiter here that waits a second, since script is too fast // and needs to wait for save dialog box to be shown robot.keyPress(KeyEvent.VK_ENTER); 

另一种保存方法是命令Chrome保存到磁盘而不是打开页面。 以下是做法:

 ChromeOptions chromeOptions = new ChromeOptions(); // this will make automatically download to the default folder. chromeOptions.AddUserProfilePreference("plugins.always_open_pdf_externally", true); ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService(); chromeDriver = new ChromeDriver(chromeDriverService, chromeOptions); var downloadsPath = KnownFolders.Downloads.Path; var generatedFilePngs = Directory.GetFiles(downloadsPath, string.Format("{0}*.pdf", "TheNameOfYourPDF"));