问题标签 [phantomjs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
829 浏览

ruby - 自动网页抓取问题

我正在开发一个相当大的自动化应用程序来从各种状态数据库中抓取各种废弃的属性信息,以便找到特定的属性。我已经使用各种自动化形式为大约 8 个州网站开发了搜索脚本。我更喜欢使用 ruby​​ 的 Mechanize 库之类的东西来执行自动化,因为它是迄今为止我遇到的最稳定的方法。在某些情况下,我无法使用 Mechanize 自动进行抓取,必须回退到像 Watir 之类的东西(或者更具体地说,是 Watir 的一个分支,称为 Vapir)。当源需要搜索 javascript 时,特别需要 Vapir,因为 Mechanize 只发出 HTTP 请求,不处理 JS 解释。

我的问题是 Vapir 自动化 Internet Explorer 的一个实例。在某些情况下,经过长时间的搜索(其中一些搜索是针对 4,000 多个搜索词的列表),IE 会锁定。我认为这是 OLE 引擎的问题。我收到的错误如下:

我找不到任何东西来解决这个问题。

我的问题是,是否有人知道锁定的自动 OLE 实例的任何解决方案或解决方法?要修复该错误,我必须手动终止所有 IE 进程并重新启动自动搜索。

我知道的替代方案是通过Vapir在后端(而不是 IE)自动化 Firefox,或者可能切换到PhantomJS之类的东西。有人对这些选项中的任何一个有意见吗?

0 投票
2 回答
10480 浏览

javascript - 如何捕获 PhantomJS 获取的页面中生成的 JavaScript 错误?

我有一个 PhantomJS 脚本,它加载一个本地 HTML 文件,注入一些 javascript 文件,然后在页面的上下文中执行一些 javascript。运行的 javascript 会生成异常,但我只从控制台获取输出,这似乎无法区分错误和正常日志,也没有文件、行号或堆栈跟踪。

我需要的是一种捕获或以其他方式区分这些错误的方法。我已经尝试过:

  • 将我的 PhantomJS 脚本包装在 try-catch 中
    • 结果:没有东西被扔到足以被它抓住的地方
  • 定义一个window.onerror函数
    • 结果:什么都没有发生。WebKit 没有在窗口上实现 onerror 事件

我希望能够检索错误对象本身,以便我可以检索堆栈跟踪。

0 投票
2 回答
7149 浏览

font-face - 如何在 PhantomJS 屏幕截图中呈现 @font-face?

屏幕截图很棒,但自定义的@font-face 字体没有被渲染。有可能纠正这个吗?

0 投票
1 回答
10813 浏览

windows - 使用 Phantom JS 将文件夹中的所有 HTML 文件转换为 PNG

我已经开始在 Windows 上使用 Phantom JS,但是我很难找到有关其功能的文档(可能是我问题的根源)。

使用 Phantom JS 我想做以下事情:

  1. 给它一个本地机器文件夹位置,
  2. 让它导航到该位置并识别 HTML 文件列表,
  3. 一旦该列表被识别为循环 HTML 文件列表并将它们全部转换为 PNG(类似于 rasterize.js 示例的工作方式),其中文件名 gsubs“HTML”和“PNG”。

我确信这可能是可能的,但我找不到 Phantom JS 函数调用:

  1. 获取文件夹中的文件列表和
  2. Phantom JS 中 gsub 和 grep 的格式。
0 投票
1 回答
3808 浏览

javascript - Phantomjs 上的 javascriptEnabled 问题

我正在使用 phantomjs 从网站上抓取一些数据。为了加快加载速度,我通过执行以下操作禁用了网页上的 js 执行:

但这会导致问题——无论函数应该返回什么,它都会返回page.evaluate(somefunc.toString())null如果我将 js 设置默认为 true,page.evaluate()则将再次起作用。

我应该如何解决这个问题?谢谢

0 投票
3 回答
351 浏览

http - 如何屏幕抓取非平凡用户场景的 HTML 结果

我希望能够获取页面的 HTML,如果我在浏览器中以交互方式执行此操作,将涉及多个操作和页面加载: 1. 转到主页 2. 在登录表单中输入文本并提交表单( post) 3. 帖子会经过各种重定向和框架集使用。

Cookie 会在整个过程中进行调整。

在浏览器中,提交后,我只是得到了页面。

但是要使用 curl(PHP 或其他)或 wget 或其他低级技术来做到这一点,cookie、重定向和框架集的管理都变得相当繁琐,并且非常紧密地将我的脚本绑定到网站(使其非常容易受到即使很小我正在抓取的网站的变化。)

谁能建议一种方法来做到这一点?

我已经看过CrowbarPhantomJSLynx(带有 cmd_log/cmd_script 选项),但是将所有内容链接在一起以准确模仿我在 Firefox 或 Chrome 中所做的事情是困难的。

(顺便说一句,目标网站认为这个脚本Firefox 或 Chrome 或“真正的”浏览器甚至可能是有用/必要的)

0 投票
3 回答
2092 浏览

jquery - 用 jQuery 捕获 XHR?

我正在将 PhantomJS 与 jQuery 一起使用,我想知道是否可以在将 XMLHttpRequest 传递给浏览器时捕获它,而无需自己启动 POST/GET。

0 投票
3 回答
14941 浏览

web-crawler - 你如何使用 PhantomJS 进行爬虫

我正在尝试利用 PhantomJS 和蜘蛛整个域。我想从根域开始,例如 www.domain.com - 拉取所有链接(a.href),然后获取每个新链接,如果它们没有被抓取或在队列中添加新链接到队列.

想法,帮助?

提前致谢!

0 投票
1 回答
1174 浏览

c# - 如何使用 javascript slowAES 将加密文本从 C# 发送到 PhantomJS 脚本?

我的服务器上有一个在 PhantomJS 中运行的脚本,我需要将密码作为命令行参数传递给脚本。对于那些不熟悉 PhantomJS 的人来说,它是一个无头 webkit 浏览器,运行服务器端,无需客户端交互。

为了将密码加载到 PhantomJS 中的虚拟网页对象的上下文中,它需要存储在包含在特定网页对象中的 javascript 文件中。密码文件将只保留足够长的时间以登录并将被删除。我有一个故障安全机制,可以在脚本不再需要文件后删除它。我不希望此密码以纯文本形式存储,因此我想使用 AES 加密。

密码将使用 AES 加密存储在我的数据库中。我知道以这种方式存储密码不是最安全的方法,但脚本需要知道密码,因此哈希不是一种选择。

我将在我的 ASP.NET MVC3 Web 应用程序中从 C# 调用此 PhantomJS 脚本,并且我想使用 AesManaged 或 RijndaelManaged 从 C# 传递加密密码。我对密码学有了基本的了解,并设法让一些代码在 C# 和 javascript 中工作。但是,当我从 C# 加密文本时,我无法使用 javascript 对其进行解密。以下是我的一些 C# 代码示例:

javascript代码使用slowAES实现:

这段 javascript 代码只是设置,所以我可以快速测试加密和解密。在 C# 和 javascript 之间进行加密和解密之后,我将把密码作为来自 PhantomJS 的命令行参数进行处理。

关键和IV是:

运行文本“test”的加密后,C# 代码的输出如下:

这是javascript的输出:

我已将 PKCS7 填充应用于 C# 代码,因为 slowAES 使用 PKCS7 填充。我什至尝试过使用我自己的 PKCS7 填充实现,但仍然没有得到相同的结果字节数组。如果我遗漏了什么,请告诉我。非常感谢。

0 投票
5 回答
11022 浏览

maven - 集成 maven/qunit/phantomjs 的更好方法?

我一直在研究在我们的 maven CI 环境中进行 JS 单元测试的最佳方法。我目前在我的 maven 项目中拼凑的内容如下:

  • qunit 资源(JS/CSS 文件)
  • qunit 使用 html 夹具测试 html 文件(每个被测文件一个)(如果需要)
  • index html 文件,它将测试 html 文件作为超链接的有序列表引用
  • PhantomJS 运行器文件,其中:
    • 打开 index html 文件并解析出测试文件列表
    • 打开每个测试文件
    • 截取每个文件的 qunit 测试结果
    • 如果有任何失败,退出状态为“1”
    • 如果没有失败,以“0”状态退出
  • 如果 phantomjs 未安装,shell 文件将以“0”退出,如果已安装,将调用 phantomjs 测试
  • 更改 pom.xml 以在构建的测试阶段运行 phantomjs 测试:

    /li>

所以,这很好用。它在我们的开发和构建机器上构建期间运行 qunit 测试(只要安装了 PhantomJS)。测试在无头浏览器环境中运行,对 qunit 测试没有任何限制。我见过的其他 maven/qunit 集成由于在 Rhino 或其他 JS 环境中运行测试而失败,这些环境对我们可以编写的测试类型施加了限制。加上 phantomjs 使我们能够获得测试运行的屏幕截图,这有助于解决任何故障。

我的方法的缺点是需要在构建/开发机器上安装 PhantomJS。我不知道如何将 phantomJS 捆绑到依赖项中,这样开发人员就不必担心安装 PhantomJS。谁能给我推动这个方向?我该如何开始?