Skip to main content
 首页 » 编程设计

python之使用 Python Selenium Webdriver 捕获 PDF 文件

2025年05月04日34luoye11

我们使用 python 测试套件测试内部开发的应用程序,该测试套件通过 Selenium WebDriver 完成网络导航/交互。我们网络测试的一个棘手部分是处理应用程序中的一系列 pdf 报告。我们正在测试 Firefox 从 v3.6 到 v16.0.1 的计划升级,事实证明我们之前捕获报告的方式不再有效,因为 firefox 的临时文件夹的目录结构发生了变化。我没有编写原始的 pdf 捕获代码,但我会重构它以用于我们最终使用 v16.0.1 的任何内容,所以我想知道是否有比我们使用 Python 的 selenium webdriver 绑定(bind)保存 pdf 更好的方法目前正在做。

以前,对于 Firefox v3.6,单击生成报告的链接后,我们会扫描“C:\Documents and Settings\\Local Settings\Temp\plugtmp”目录中的 pdf 文件(具有特定名称约定)生成。需要明确的是,我们并没有从网页本身保存报告,我们只是使用在 firefox 的 Temp 文件夹中生成的报告。

在 Firefox 16.0.1 中,点击生成报告的链接后,会在“C:\Documents and Settings\\Local Settings\Temp\tmp*\cache*”中生成文件,文件名随机,不以“.pdf”结尾。如果使用与我们之前的技术类似的技术,这会使捕获此文件变得更加困难 - 每个浏览器都有不同的 tmp*** 文件夹,其中有一个充满文件夹的缓存,其中生成的报告具有随机文件名.

我能看到的最简单的解决方案是直接保存 pdf,但我还没有找到这样做的方法。

要使用我们在 FF3.6 中使用的相同方法(在 Temp 文件夹目录中找到 pdf),我认为我们需要执行以下操作:

  1. 找出哪个 tmp*** 文件夹属于这个特定的浏览器实例(我们可以检查浏览器实例化前后存在的 tmp*** 文件夹)
  2. 在生成 pdf 报告后立即在浏览器的缓存中查看生成的文件(我们可以通过比较时间戳)
  3. 在缓存中生成多个文件的情况下,我们可能会根据大小进行排序,并选择最大的文件,因为 pdf 几乎肯定是最大的临时文件(尽管这看起来不稳定并且需要测试在实践中)。

我对这种方法感觉不太好,想知道是否有更好的方法来捕获 pdf 文件。谁能提出更好的方法?

注意:PDF 文件的实际抓取工作仍然正常。

请您参考如下方法:

我们最终通过在测试前清除 firefox 的临时 Internet 文件,然后在生成报告后查找最近创建的文件来实现这一点。