问题标签 [phantomjs-node]

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 回答
25 浏览

javascript - 如何将数据传递给 page.eveluate 函数?

考虑来自node-phantom 的代码:

该功能直接在html页面中执行,因此添加这样的参数:

导致undefined someExternalVariable,因为打开的页面什么都不知道someExternalVariable。那么如何传递外部数据来评估phantomjs-node中的函数呢?

0 投票
1 回答
744 浏览

python - 如何更改 PhantomJS 的屏幕分辨率?

无论如何,我找不到有关更改屏幕制裁的问题。总会有的1024x768。更改 viewportSize 本身不会更改屏幕分辨率。我在这里检查了分辨率:链接

这是针对节点的:

任何人都可以为蟒蛇重新制作吗?

0 投票
0 回答
596 浏览

jquery - Phantom.js 未在 $(document).ready 中加载内容

我正在使用 PhantomJS 截屏我的页面,但遇到了一些问题。当从 Firebase 检索数据时,我的页面内容 90% 是通过 jQuery 呈现的。我正在使用phantomjs-node,因为我正在通过 Nodejs 构建我的网络。

我想在 Firebase 的数据填充网页后截屏,但它似乎不起作用。

我的nodejs文件:

我的 HTML 文件:

我的 HTML 网页可以正常工作,因为如果我在没有 PhantomJS 的情况下单独加载它,所有内容都可以完美加载。但是,如果我使用 phantomjs 并渲染页面,我得到的只是在加载 jQuery 脚本之前 HTML 的静态内容。仅打印 HTML 正文中的内容,而不打印整个站点。见图片:

在此处输入图像描述

在此处输入图像描述

我试过延迟 10000 毫秒,但我仍然得到相同的屏幕截图。

我得出的结论是,在 phantomjs 中根本没有加载 jQuery,但我不确定如何解决它(确认没有加载 jQuery)。

我曾尝试使用 onCallback 并将其包含window.callPhantom()在我的 html 中,但它也从未被回调。

0 投票
1 回答
585 浏览

node.js - 如何使用节点幻象存储 cookie?

我在从网站获取后尝试存储 cookie。但是,当我创建一个全局变量并尝试将其存储在它返回为未定义的变量中,或者当我尝试创建一个带有 cookie 的文件时,它返回未定义为好吧,但我可以用 console.log 打印它。

我的代码:

如何将这些 cookie 存储在文件中并获取它?

0 投票
1 回答
620 浏览

javascript - Node.js & co - 避免混合承诺和事件回调

最近,我一直在尝试phantomjs-node图书馆。我想要实现的基本上是创建一个动态网页模板,使用phantomjs-node库来“运行”它,最后从渲染的页面中提取一些数据。

在最简单的设置中,第一次尝试是这样的(在下面的示例中,模板只是静态的,但原则上它可能包含一些利用外部库的进一步逻辑等):

但是,输出失败:

很可能是因为当最终调用then返回的 promise 的 -callback时page.evaluate,主幻象进程已经退出。

为了“解决”这个问题,我采用了以下即兴策略(省略下面示例的其余部分):

这实质上创建了一个新的 Promise,该 Promise 由返回的 Promise “外部”解决page.evaluateyield P块末尾的语句然后co阻塞,直到所需的结果准备好,因此输出如预期:

虽然这似乎可行,但感觉很“hacky”(例如在调用之前在回调中抛出的异常resolver不会在主try/catch块中检测到),所以我想知道什么是更清洁的方法来“转移“控制从onLoadFinished回调回到由管理的领域co

0 投票
1 回答
77 浏览

node.js - NodeJS:将数组异步返回到下一个承诺

我熟悉异步编程和使用回调,但是我不熟悉使用 Promise。我有以下代码:

当我将它传递给'html'并尝试获取className时,我收到一条错误消息,指出未定义类型不存在0,我相信是这种情况,因为当我返回元素时,它不会等待HTML元素被推入因为它是异步的。我知道如果我使用回调,我可以使用回调(元素),但我不确定在这种情况下该怎么做。

编辑:page.evaluate() 是 phantomjs-node 使用的函数,可在此处找到https://github.com/amir20/phantomjs-node。这也只是一段代码。当只返回一个 HTML 元素时,我可以获得它的类名。像这样:

0 投票
3 回答
436 浏览

javascript - Node js 和 Phantom js

我正在寻找一个页面作为学习 phantomjs 的练习,但是我目前遇到了一个问题。图像加载被推迟,所以我试图弄清楚如何让 phantom js 向下滚动并等待图像加载。滚动到页面底部不起作用,所以我想每 3 秒滚动 100 像素,直到它到达页面底部。我将如何实现这一目标?

0 投票
2 回答
6253 浏览

javascript - 使用 npm 安装 phantomjs 错误

我正在对我的 javascript 代码进行单元测试。我更喜欢使用无头浏览器以便于运行。当我安装了一些依赖项时它运行良好,但是当我安装 phantomjs 时,它有一个错误。

C:\Phantomjs>npm install -g phantomjs npm WARN 不推荐使用 phantomjs@2.1.7:包重命名为 phantomjs-prebuilt。请更新 'phantomjs' 包引用到 'phantomjs-prebuilt' npm WARN deprecated node-uuid@1.4.8: Use uuid module instead npm WARN deprecated strong-cookie@2.2.2: ReDoS 漏洞解析 Set-Cookie h ttps:/ /nodesecurity.io/advisories/130 C:\Users.ra\AppData\Roaming\npm\phantomjs -> C:\Users.ra\AppData\Roaming\npm\node_modules\phantomjs\bin\phantomjs

phantomjs@2.1.7 安装 C:\Users.ra\AppData\Roaming\npm\node_modules\ phantomjs 节点 install.js

考虑在 C:\Users.ra\AppData\Roaming\npm\phantomj s.CMD 找到的 PhantomJS 看起来像一个 npm install -g在 windows 上;跳过已安装的版本。下载 https://github.com/Medium/phantomjs/releases/download/v2.1.1//phanto mjs-2.1.1-windows.zip 保存到 C:\Users.ra\AppData\Local\Temp\phantomjs\phantomjs -2.1.1-wind ows.zip 使用代理http://.ra :******@proxy:3128/ 接收中...

发出请求时出错。错误:无法建立隧道套接字,ClientRequest.onConnect (C:\Users.ra\AppData\Roaming\npm\node_mo dules\phantomjs\node_modules\tunnel-agent\index.js:165:19) 处的 statusCode=502 Object.onceWrapper (events.js:320:30) at emitThree (events.js:135:13) at ClientRequest.emit (events.js:216:7) at Socket.socketOnData (_http_client.js:470:11) at emitOne (events.js:115:13) 在 Socket.emit (events.js:210:7) 在 addChunk (_stream_readable.js:264:12) 在 readableAddChunk (_stream_readable.js:251:11) 在 Socket.Readable。推(_stream_readable.js:209:10)

请在https://github.com/Medium/phantomjs报告此完整日志npm WARN 错误:EPERM:不允许操作,scandir 'C:\Users.ra\AppData\Roaming\npm\node_modules\phantomjs\node_modules\dashdash\node_modules' npm WARN { 错误:EPERM:不允许操作,scandir 'C :\Users.ra \AppData\Roaming\npm\node_modules\phantomjs\node_modules\dashdash\node_modules' npm WARN 堆栈:'错误:EPERM:不允许操作,scandir \'C:\Users\p ardillo.ra\AppData\漫游\npm\node_modules\phantomjs\node_modules\dashda sh\node_modules\'',npm WARN errno:-4048,npm WARN 代码:'EPERM',npm WARN 系统调用:'scandir',npm WARN 路径:'C:\Users \.ra\AppData\Roaming\npm\node_modules\p hantomjs\node_modules\dashdash\node_modules' } npm 错误!代码 ELIFECYCLE npm 错误!errno 1 npm 错误!phantomjs@2.1.7 安装:node install.jsnpm 错误!退出状态 1 npm ERR!npm 错误!phantomjs@2.1.7 安装脚本失败。npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。`

我应该怎么办?

0 投票
1 回答
187 浏览

javascript - 如何访问 page.open 函数结果?幻影

如何访问回调返回的结果?

0 投票
0 回答
41 浏览

phantomjs - PhantomJS 记录用户会话视频

我正在开发一个内部解决方案来记录他们访问的网页中的用户会话活动。活动是指鼠标移动和点击。

我已经在事件发生时记录了带有时间戳的信息,但我想知道是否有办法在访问网页时使用 PhantomJS 捕获视频(或一系列图像)。

我考虑过每次都捕获一个屏幕截图......但是我怎样才能获得用户正在查看的页面的实际部分?

非常感谢您的帮助!