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

javascript - 更新问题:: querySelector 可能存在 PhantomJS/Javascript 问题

我正在使用 cli 中的 PhantomJS (v1.5) 和 javascript 运行测试。测试在 fedora/centos 上运行。

该测试说明了从 querySelector 返回 html(type) 元素时出现的错误(用户或其他错误)。

测试了两个项目,第一个是输入,第二个是anchor

带有 id=ICType 的输入正常工作,锚返回一个 href/content,它不是我期望的 htmlAnchorType。

我希望能够在返回的 htmlAnchorElement 上执行一种 foo.click() ,然后应该为所选锚点调用 href javascript。但是,如果返回的唯一内容是 href 内容..那么这似乎是一个问题..

上网查了一下,还没有想到我做错了什么。

想法/评论???

谢谢

foo.js

0 投票
1 回答
187 浏览

javascript - 内部异常评估

我正在尝试与一个编码相当糟糕且速度非常慢的网站进行交互。我将举例说明我遇到的问题:

在这个网页上有 2 个选择框,第一个用于选择国家,onchange 向网络服务器发出 AJAX 请求,然后返回城市列表。此列表用于填充第二个选择框。现在的问题是我可以使用 phanomtjs 页面对象中的评估函数来遍历第一个选择框并选择正确的选项。但在那之后,我必须等待 n 秒才能填充第二个框。目前,我已经通过设置计时器等待 25 秒,然后从第二个框中选择城市来“解决”这个问题。然而,这是一个非常糟糕的解决方案。首先,25 秒在所有情况下都不够长,所以有时它会超时而失败。第二个问题是,在大多数情况下,25 秒太长了。

所以我必须找到一种方法来等待第二个盒子被填充。起初我虽然可以在评估函数中使用 setInterval 来测试是否填充了选择框。这行得通,但有一个问题,因为 setInterval 是异步的,使用这种方法我失去了找出是否可以做出正确选择的能力。为了说明我的意思,下面的代码是当我不必等待时它是如何工作的:

该 selectOption 是一个迭代 select 元素直到找到正确的选项元素的函数,如果失败则返回 false,然后由评估函数返回此返回值,以便我可以检查它是否有效。

另一种选择是在网页上下文中使用 setInterval 进行等待,如果失败则引发异常。我试过这样做,但我似乎无法捕捉到网站范围之外的异常。PhantomJS 在终端中转储异常,但我无法拦截。

有没有办法解决?还是我应该只使用固定等待时间选项?

编辑:我尝试使用 page.onError,但它似乎没有被使用。

0 投票
0 回答
367 浏览

ruby-on-rails - Rails 2.3 和 phantomJS 中的竞争条件

我有一个在 REE 上运行的 rails 2.3 应用程序。我正在使用 capybara 1.1.2、cucumber 1.1.0、poltergeist(同时使用 0.6.0 和来自 github 的最新版本)和 phantomJS 1.5.0。我的问题是我相信我在 phantomJS 中有一个竞争条件导致我的黄瓜测试随机失败。当我在 Chrome 中运行黄瓜测试时,它们可以完美运行,所以我很确定问题出在 poltergeist 或 phantomJS 中。当我在 PhantomJS 中运行黄瓜测试(以便我可以在 CI 服务器上运行它们)时,我会随机收到如下错误:

页面上的 Javascript 代码中出现了一个或多个错误:

cucumber features/account_creation.feature:79 # 场景:我应该能够使用旧用户名和密码登录 cucumber features/account_creation.feature:88 # 场景:我应该能够记住我的登录信息,以便在关闭浏览器时我自动登录

基于poltergeist 的 Github 页面,我已将其添加到我env.rb的解决方案中,以解决机架 1.3 版本之前的竞争条件问题:

但这并没有什么区别,我可以说。任何想法都会受到赞赏,即使它只是暗示这是一个 poltergeist 问题或 phantomJS 问题,所以我知道接下来我应该如何询问它。

0 投票
1 回答
8349 浏览

php - 如何在来自php的响应中回调一个http请求?

我需要编写一个 php 脚本,它将向我的 PhantomJs 服务器发出 POST 请求,并在收到响应后调用一些回调函数。

假设这是我的 phantomjs 服务器:

因此,从我的 php 脚本中,我需要向 phantomjs 发出请求http://localhost:8080,当 phantomjs 完成计算并发送响应时,触发回调函数。我找到了这个主题:如何在 PHP 中发出异步 GET 请求?. 这里有什么用处吗?我正在考虑这种 curl 方法,但不确定如何让所有这些一起运行,因为我是一个完全的 php 初学者:如何在 PHP 中发出异步 GET 请求?.

0 投票
1 回答
9046 浏览

php - 从 php 启动 phantomjs 服务器并等待它的响应

我想从我的 php 脚本运行一个 phantomjs 服务器,然后向它发出 curl 请求并读取它的响应(在最终版本中将给出生成的 pdf 的路径)。从控制台运行 phantomjs 服务器文件然后在浏览器中导航到它的地址时,一切正常。那是 server.js 文件:

基本上我正在打开 localhost 地址,将页面内容切换到我的 html 字符串,然后将呈现的页面保存为 pdf。

现在是我的 php 脚本:

这里也没有魔法。我phantomjs server.js在终端中执行命令,并在 5 秒后(启动服务器的时间)向它发出 curlPOST 请求。
现在我有两个案例:

  • 如果我从控制台运行 php 脚本,php script.php服务器会启动,因为我可以看到进程正在运行并且图标在 Dock 中可见,但我从未得到任何响应,并且未创建 pdf。
  • 如果我从浏览器运行脚本,则图标在扩展坞中不可见,因此服务器以其他方式启动。仍然没有回应也没有pdf。

任何人都可以在我的代码中看到任何错误或想到任何调试方法吗?

在 OSX 10.7、php 5.3.6、phantomjs 上测试最新。运行服务器的用户 _www 具有管理员权限,我正在写入文件的文件夹已更改为 777。

0 投票
1 回答
2871 浏览

javascript - 使用 href/Javascript 访问锚点

在具有附加到 javascript 的 href 的锚点的系统上测试 CasperJS。照常做

上述方法均无效。项目的 Git 存储库表明 Casper 有一个 CasperUtils/ClientUtils 库,该库似乎__utils__有一个 click 方法,这是调用的方式href="javascript:foo()"元素的方法。

但是,我似乎无法弄清楚如何让它运行。

如果有人使用过 CasperJS,并且有关于如何实现的代码示例,我们将不胜感激!

理想情况下,最终结果应该是这样的:

或者,如果你有一个指向我可以运行的测试代码用例的指针,那会让我们看看应该如何实现它。

0 投票
1 回答
1148 浏览

php - 使用 casperjs 和 PHP 保存数据

我一直在寻找某种关于如何做到这一点的教程或示例,但要么我不明白解决方案就在我的眼皮底下,要么没有人真正把它放在那里。

我想做的是使用 casperjs 来自动化我在网站上创建帐户的过程。我将提供几个不同的用户名,然后我想在最后输出一个文件,其中包含用于注册的用户名和密码。

如果我不需要使用 PHP 来执行此操作,那也可以。我只是很困惑。谢谢您的帮助。

0 投票
1 回答
11006 浏览

javascript - 使用 casper/phantomjs 输出客户端控制台

通过 casperjs 文档,我找不到可以从客户端 javascript 中看到 console.log 的位置。这可能吗?

0 投票
3 回答
1613 浏览

php - 加载所有javascript后如何输出DOM?

作为标题,我的问题是如何在页面上输出所有 DOM 内容(让我们说在服务器计算机上另存为文本文件或将结果传递给使用 ajax 的其他 php 函数)?

我做了一些功课,我尝试 curl 可以使用“curl http://google.ca > dom.txt”输出所有 DOM 内容但是,这种方法不会保存 Javascript 生成的内容,换句话说,javascript 代码会不跑。另一种方法是在页面中嵌入一些 javascript 代码,让页面加载我们要输出的网站,然后在加载完所有内容后使用 javascript 代码保存所有 DOM 文件。

我不确定phantom.js是否可以做这样的工作,如果可以,那该怎么做?

任何机构都可以就如何实现这一目标给出详细的答案?

我对任何解决方案持开放态度,该程序将在我的服务器上运行以提供服务。

先感谢您。

0 投票
2 回答
1669 浏览

javascript - 在骨干应用程序中进行 SEO,以便谷歌可以在 phantomjs 之后索引主页

我有骨干网站。我使用了 phantomjs,以便搜索引擎可以按照 _escaped_fragment_spec 通过 js 链接 (#!/something) 进行查找。我已经使用 google webtools 进行了检查,以查看 google 将如何看待我的网站,并且大多数情况下一切似乎都是正确的。

但是,主页(例如:www.example.com;链接中没有#!的那个),google没有发送_escaped_fragment_spec,所以页面没有发送到phantomjs,也没有应用js,因此google是看着几乎是空的页面。

有谁知道如何指出这一点,或解决问题?

谢谢

编辑:根据谷歌(https://developers.google.com/webmasters/ajax-crawling/docs/getting-started),你应该添加到头部,但是我已经添加了它,并且 webtools - 见谷歌,没有接缝将主页作为javascript处理。有什么帮助吗?有问题的网站是http://www.boletus-app.com/ 谢谢