使用Selenium WebDriver使用Firefox“打印”或“另存为”功能

时间:2014-01-08 00:17:14

标签: firefox selenium selenium-webdriver

我想以编程方式指示Firefox访问URL列表(例如,在文本文件中定义),并且每个URL都将页面保存到磁盘或打印它。

我知道Selenium提供了捕获页面截图的功能,但我想知道是否可以使用浏览器的原生保存和打印功能。

如果Selenium没有提供这样的功能,那么任何其他工具是否允许我定义一个由Firefox执行的脚本并获得类似的结果?

4 个答案:

答案 0 :(得分:10)

可以在firefox中启用静默打印以打印到默认打印机,绕过打印对话框。

所需的firefox偏好设置为print.always_print_silent,可以使用selenium进行设置,如下所示:

import org.openqa.selenium.JavascriptExecutor;
/* ... */
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("print.always_print_silent", true);
WebDriver driver = new FirefoxDriver(profile);

现在只需导航到网页并使用javascript调用print:

driver.get("http://www.google.com");
((JavascriptExecutor)driver).executeScript("window.print();");

此外,将其与免费的PDF打印机(例如novaPDF)连接到print without displaying the Save as dialog,并自动将PDF保存到预定义的位置。

答案 1 :(得分:1)

通常您会使用Sikuli API执行此操作。开源社区(也就是Mozilla基金会)正在开发一个名为Marionette的项目,据说可以让你在不使用屏幕截图匹配的情况下做这些事情,但它仍然是alpha,他们仍在使用它,Chrome和IE还没有登录它爱好。

应该注意的是,在本机文件下载中,您实际上不需要测试已经过良好测试的另存为对话框的浏览器功能。 Selenium测试人员通常做的只是使用Apache HttpUtils或类似的东西下载文件,并在下载步骤中绕过浏览器。然后您不需要使用“另存为”对话框,它将跨浏览器工作。只需使用selenium获取下载URL并使用Java代码下载它。

答案 2 :(得分:0)

如果您可以使用png格式,则可以获取整页屏幕截图。

import selenium.webdriver
import selenium.common

options = selenium.webdriver.firefox.options.Options()
# options.headless = True
with selenium.webdriver.Firefox(options=options) as driver:
    driver.get('http://google.com')
    time.sleep(2)
    root=driver.find_element_by_tag_name('html')
    root.screenshot('full page screenshot.png')

答案 3 :(得分:0)

也许这可以帮助您... https://stackoverflow.com/a/64987078/6003328

我用python做的... 基本上,我更改每个打印的 about:config 设置,调整要创建的pdf的文件名,并将打印机设置为always_print_silent:true ...