问题标签 [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 回答
1230 浏览

pdf - 使用 Web 技术将多个 PDF 合并为单个多页文件

我有许多单页 PDF 文件需要合并成一个多页的文件(PDF 是从 HTML 页面生成的)。此外,它需要是一个跨操作系统、跨浏览器的解决方案,并且独立于服务器上使用的后端技术(必须在 Windows、Linux 和 OS X 上工作并易于安装)。我正在考虑将文件与 PDF.js (来自 Mozilla)合并,但从我读过的内容来看,它只会在 Firefox 和 Chrome 下呈现正确的 PDF(所以 IE 用户被排除在外,或者不?)。在浏览器/网络环境中执行此操作的任何其他选项?它将用于商业应用程序,因此如果它是某些第三方软件,我还需要适当的许可证。

0 投票
1 回答
334 浏览

node.js - NodeJS 在渲染之前加载网站并从页面中删除元素

我最近搞砸了 NodeJs,它可以加载任何网站并保存屏幕截图。更具体地说,我使用 PhantomJS 加载网站并保存屏幕截图。我也使用过 CasperJS 和 ZombieJS,但是这些工具都不能真正让你在加载之前弄乱网站的资源。甚至可能吗?

需要明确的是,我想加载任何网站,比如说 stackoverflow.com 并计算加载时间并保存屏幕截图。这很容易,但是在第二次运行时,我想加载同一个网站并删除 jquery 资源,然后计算它的加载时间。

看起来 phantomjs 和 casperjs 有 onResourceRequested 或 onResourceReceived 之类的回调,但没有中止请求的方法。是否可以?我不想通过一些执行此操作的 php 脚本来代理请求,但这是替代方法。

0 投票
1 回答
1462 浏览

ruby-on-rails - 在 Ruby On Rails 上使用 PhantomJS 对动态页面进行服务器端渲染

我有一个 90% Javascript 的网页。所有的网站都是动态呈现的。

我希望这些内容也由服务器呈现,以便 Google 可以抓取和索引我的所有内容和链接。

我知道,为了不被google禁止,动态页面和服务器渲染页面的内容必须几乎相同。

我不想编写两个不同的页面(在这种情况下,一个来自带有 Handlebars 的客户端,另一个来自带有 ERB 的服务器)。

所以我想到了 PhantomJS。我想要的是,当我从 google 获得 _escaped_fragment_ 参数时,我使用 PhantomJS 打开没有该参数的页面,然后从 PhantomJS 将其呈现为 HTML 并将其从服务器返回给 Google。这样,我不必为任何东西创建两个不同的页面。

我知道我也可以将 Handlebars 用于服务器端模板,但无论如何我都必须编写两次代码。

有谁知道如何用 PhantomJS 完成这个?有没有其他方法可以不重复逻辑和代码两次并让谷歌索引站点?

谢谢!!!

0 投票
3 回答
15333 浏览

javascript - phantomjs javascript逐行读取本地文件

我从来没有使用 javascript 逐行读取文件,而 phantomjs 对我来说是一个全新的球赛。我知道幻影中有一个 read() 函数,但我不完全确定如何在将数据存储到变量后对其进行操作。我的伪代码是这样的:

如果有人可以用真正的代码语法帮助我,我对 phantomjs 是否会接受典型的 javascript 或什么感到有点困惑。

0 投票
1 回答
578 浏览

javascript - 使用 Phantomjs 使用 Google Feed API

我正在尝试将这个 google feed api 的示例翻译为与 Phantomjs 一起使用。按照Phantomjs的示例,我有以下内容:

输出说:

我试过定义 var google;就在包含但没有运气之后。一般来说,我是 Phantomjs 和 js 的新手。任何指针都非常感谢。

0 投票
1 回答
1140 浏览

php - 通过 PHP 在 PhantomJs 中打开多个 html 文件会引发语法错误

我希望我的 php 脚本从命令行调用 phantomjs,这将从许多 html 文件中生成多个 pdf。所以我有一个连接字符串,其中包含指向我的 html 文件的路径,然后我调用exec命令:

当我调用 'phantomjs render.js "file1.html|file2.html"' 时,一切正常。但是,当尝试从 php 脚本执行此操作时,我在 apache error_log 中收到以下错误:

我使用的 HTML 文件看起来不错,所以我不知道是什么原因造成的。在浏览器中运行此脚本时的输出是 :Array ( ) 1而不是我在命令行中得到的文本。

下面是 PhantomJs 渲染脚本:

0 投票
2 回答
778 浏览

ruby-on-rails - 如何从 Rails 应用程序内部设置系统调用的路径?

我正在尝试从 rails 执行 phantom.js 模块。到目前为止,我已经成功安装了二进制文件,并且 phantomjs 的路径似乎工作正常。

但是,当我尝试使用反引号从 Rails 应用程序运行它时(例如:phantomjs rasterize.js http://google.com 1.jpg),它显示没有这样的文件或目录。

我认为原因是它找不到 rasterize.js 的路径我尝试将 rasterize.js 文件放在 #{Rails.root} 中,在公用文件夹内,在控制器文件夹内,但没有任何效果。

我怎么解决这个问题?

====

更新:为了澄清,我发布了哪些代码在我的控制器中有效,哪些无效。

<= 上面的代码没有吐出路径错误,当我从浏览器发送请求时,phantomjs 进程确实被调用,导致在服务器端打开控制台。

<= 这不起作用,它吐出错误说“没有这样的文件或目录”,这就是为什么我认为它与 rails 无法找到 rasterize.js 的路径有关。我尝试将 rasterize.js 放在公用文件夹、控制器文件夹和主目录中:#{Rails.root},但它总是一样的。

0 投票
2 回答
6449 浏览

dpi - 使用 render() 控制图像输出的 DPI

使用phantomjs,有没有办法控制使用该page.render(filename)方法对 Web 内容的图像进行光栅化时使用的 DPI 设置?

我找不到任何可以通过接口 api控制它的东西,但不知道是否有人已经想出了一种方法来做到这一点。

我们的业务案例如下所示:

通过 Web 应用程序创建的自定义 HTML 内容被馈送到我们的 rasterize.js 幻像进程,并被查询特定标签以设置客户端矩形。此客户端矩形被渲染为 HTML 的 PNG,然后可以在其他地方用作图像。

我们希望生成的 PNG 的分辨率高于默认值,因为在一些奇怪的字体大小/粗体组合中文本出现锯齿。

0 投票
2 回答
871 浏览

javascript - 是否可以使用 shebang 但以某种方式从 JavaScript 解释器中“隐藏”它?

我想我的问题很难解读(请随意完善它)。但它与脚本中 shebang 行的使用有关——特别是在这种情况下是 JavaScript。假设我有这个phantomjs脚本:

我怀疑这是一个非常荒谬的问题,但是:

是否有任何可能的技巧可以让您在上面的代码中保留 shebang 行 - 这样您就可以执行文件而无需在脚本执行前加上(在这种情况下)phantomjs- 并且仍然可以在 JavaScript 中没有错误地解释它?

如果没有,是否有任何其他语言解释器(例如 Ruby、Python)“接受”shebang 行,或者更好的是,有办法忽略它们?

0 投票
2 回答
1938 浏览

javascript - 访问 phantomjs 中动态加载的元素

我正在发送一个页面事件:

page.sendEvent('click', 650, 430);

这会单击通过 ajax 动态加载元素的链接。通过 访问这个动态加载的元素是否为时已晚page.evaluate?我似乎无法在页面上动态创建的任何内容中返回任何内容。