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

javascript - 单击带有 phantom.js 的链接并检索文档 html

我是 phantom.js 的新手,我正在尝试在网站页面上导航,点击带有 phantom.js 的链接(调用 AJAX 函数并更改文档 HTML)。

这是我的代码:

我很困惑,因为在我的“动作”函数中,click() 调用会引发该错误重复 3 次:

TypeError: 'undefined' 不是函数
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 null

TypeError: 'undefined' 不是函数
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 null

TypeError: 'undefined' 不是函数
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 null

此外,如果我在发送点击时评论该行,则操作函数不会再引发错误并很好地返回“点击”控制台日志。但是3次...

我究竟做错了什么 ?

提前致谢。

0 投票
2 回答
23950 浏览

javascript - PhantomJS 不发送身份验证标头

我正在尝试在 PhantomJS 中打开一个需要 HTTP 身份验证的网页。我的脚本基于 loadspeed.js 示例:

我可以从渲染的 page.jpg 中看到我每次都得到 401。我还使用 Wireshark 跟踪了 HTTP 会话,这表明在 GET 请求中没有向给定 URL 发送任何身份验证标头。

我在这里做错了什么?我刚开始使用 PhantomJS,但我整个晚上都在搜索,但没有走远......

0 投票
1 回答
1161 浏览

javascript - 函数调用一次,但触发多次

以下是 PhantomJS 脚本的片段。它跟踪 AJAXd 网页上的动态内容。track() 被调用一次,但由于某种原因 page.open() 被调用了 3 次

将以下内容记录到控制台:

出于某种原因,我无法弄清楚, page.open() 被调用了 3 次。

0 投票
1 回答
2018 浏览

javascript - phantomjs 的受控异步退出

我正在尝试使用 phantomjs 进行一些测试......基本上我想:

  • 在我的网络服务器上打开一个页面
  • 页面初始化后(所有页面 js 已加载)
  • 从phantomjs调用页面js并测试结果
  • 退出 phantomjs

phantomjs 似乎很难注意到页面何时加载。

我可以使用 phantomjs 在窗口或其他东西上设置一个“测试”变量,以便页面 js 可以检查它,然后在完成后调用回调。问题是回调只能是页面回调,所以它不能做任何页面不能做的事情。

这对苔丝来说可能没问题,但最后一步是不可能的。

我想出了这个:

所以页面代码可以调用window.quit(),然后控制台监视器可以杀死幻影。不过,这似乎有点 hacky。有没有人有更好的方法呢?

0 投票
4 回答
2614 浏览

javascript - 纯 JS 的 jQuery ":contains()" 模拟

我正在为 CasperJS 编写脚本。我需要单击包含“1”跨度的链接。在 jQuery 中可以使用:contains('1'),但纯 Javascript 中的选择器的解决方案是什么?

HTML:<a class="swchItem"><span>1</span></a><a class="swchItem"><span>2</span></a>

jQuery 变体:$('a .swchItem span:contains("1")')

UPD CasperJS 代码:

0 投票
1 回答
8990 浏览

phantomjs - 将 PhantomJS 调用中的变量暴露给 injectJS

我遵循了从入门页面注入 jQuery 的示例,并且效果很好。我在同一目录中有 jQuery 的本地副本,并执行类似...

当我尝试注入自己的脚本时,没有任何功能可供我使用。假设我有一个名为 myScript.js 的脚本

然后我不能使用 doSomething 之类的...

我试过了

也没有运气,以及尝试在随后的 page.evaluate() 中使用 window.doSomething() 或 document.doSomething() 调用它们。

0 投票
1 回答
2745 浏览

jquery - 使用 PhantomJS 将 JQuery 注入 Amazon.com 页面会导致 JQuery 出现问题

我正在打开 Amazon.com 域中的任何页面(例如“http://www.amazon.com”),然后尝试像这样注入 JQuery:

此代码将打印true到控制台。但是,尝试像这样$(document)从内部访问page.evaluate()

将打印TypeError: 'undefined' is not a function到控制台。

此代码适用于我尝试过的大多数其他域。我注意到亚马逊似乎有自己加载的 JQuery 版本,我想知道它是否可能与我正在加载的 JQuery 版本冲突。有任何想法吗?

0 投票
1 回答
4401 浏览

mongodb - 如何使用 PhantomJS 连接到 MongoDB

我正在运行 OSX。以为我可以在某处找到文档,但找不到。

0 投票
1 回答
397 浏览

dom - 使用 phantomjs 或其他东西挖掘/抓取/Web 控制台?

我想创建一个应用程序,其行为与另一个 Web 应用程序的行为直接相关。本质上,在 Gmail 中运行的应用程序会根据用户的操作与界面进行动态交互。

我遇到的问题是我想制作一个与该 Web 应用程序交互的应用程序,但它们不提供开放 API。因此,我不能只为我需要的数据调用 api。

当我在 chrome 中打开开发控制台时,我可以看到正在运行的应用程序,以及基于活动运行的调试注释。

有什么方法可以让我使用 PhantomJS 之类的东西来抓取动态活动,以基于另一个应用程序的活动。

“如果控制台在命令控制台中显示“X”,请在此其他应用程序中运行“Z”脚本。”

我显然不是工程师,但想知道这样的事情是否可行。

处理封闭 API 的一种非常 hacky 的方式。我看不到您的代码或使用它,但如果我可以看到它工作,我可以实时记录并在另一个应用程序中与之交互似乎不合逻辑吗?

0 投票
2 回答
4086 浏览

coffeescript - 多个页面的 PhantomJS 意外加载行为

我有一个脚本(如下),它通过 3 个步骤来抓取网站。一次最多设置为 1 页时效果很好。但是,当我一次将其增加到 2 时,事情开始变得不稳定。onFinished 比我预期的更早触发,并且页面尚未完全加载。因此,我的脚本的其余部分中断了。知道为什么会发生这种情况吗?我应该补充一点,我正在使用最新版本(1.5)。