问题标签 [jsdom]

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

javascript - 如何在 PyV8 中加载 nodejs 模块?

如何在 PyV8 中加载 nodejs 模块?

我已经阅读了所有关于使用 nodejs 运行时 jsdom 有多棒的文章。如果我在 Python 应用程序中运行 v8 并使用 python“获取”Web 资源,然后将生成的 html 字符串提供给已在内部加载 jsdom 的 v8 实例,我是否会获得相同的 dom 遍历优势

(或者由于某种我还没有想到的原因,这是一个荒谬的配置?)

0 投票
1 回答
414 浏览

node.js - 为什么jsdom不会处理脚本?

在此脚本中,jsdom 不会调用 HTML 文档正文的 onLoad 属性中定义的函数。为什么不?

0 投票
6 回答
23755 浏览

node.js - 如何管理 PhantomJS 实例的“池”

我正在计划一个供我自己在内部使用的 web 服务,它接受一个参数,一个 URL,并返回表示从该 URL解析的DOM 的 html。通过已解决,我的意思是 web 服务将首先获取该 URL 处的页面,然后使用 PhantomJS 来“渲染”页面,然后在执行所有 DHTML、AJAX 调用等之后返回结果源。然而,基于每个请求(我现在正在这样做)启动幻象太慢了。我宁愿拥有一个 PhantomJS 实例池,其中一个始终可以为我的 web 服务的最新调用提供服务。

以前有没有在这种事情上做过任何工作?我宁愿这个 web 服务基于其他人的工作,也不愿从头开始为自己编写一个池管理器/http 代理服务器。

更多上下文:我在下面列出了到目前为止我看到的 2 个类似项目,以及为什么我避开了每个项目,从而导致了这个关于管理 PhantomJS 实例池的问题。

jsdom - 据我所见,它具有在页面上执行脚本的强大功能,但它不会尝试复制浏览器行为,所以如果我将它用作通用“DOM 解析器”,最终会成为处理各种边缘情况、事件调用等的大量额外编码。我看到的第一个示例是必须为我使用 node.js 设置的测试应用程序手动调用 body 标签的 onload() 函数。这似乎是一个深兔子洞的开始。

Selenium - 它只是有更多的移动部件,因此设置一个池来管理长期存在的浏览器实例将比使用 PhantomJS 更复杂。我不需要它的任何宏录制/脚本优势。我只想要一个 Web 服务,它在获取网页和解析它的 DOM 方面的性能就像我用浏览器浏览到那个 URL 一样(或者如果我可以让它忽略图像等甚至更快)

0 投票
7 回答
14415 浏览

node.js - Windows上的npm安装jsdom错误?

我已经在我的 Windows 电脑上安装了 nodejs。它工作正常。但是当我尝试使用“npm install jsdom”安装 jsdom 时,我被这个错误提示了。

节点“C:\ Program Files \ nodejs \ node_modules \ npm \ bin \ node-gyp-bin \ .... \ node_modules \ node-gyp \ bin \ node-gyp.js”重建信息如果它以ok结束
呃!错误:Python 似乎没有安装
在 Object.oncomplete (C:\Program Files \nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:66:11)错误!不好
npm WARN 可选依赖失败,继续 contextify@0.1.2
jsdom@0.2.13 ./node_modules/jsdom
+-- cssom@0.2.3 +-- htmlparser@1.7.5

谁能帮我解决这个问题?

0 投票
2 回答
1329 浏览

node.js - 如何使用nodejs在网络抓取中指定类选择器

我正在尝试使用 nodejs 实现抓取。我正在向特定的 url 发送请求,当我收到响应时,使用响应将页面中的每个产品存储到数组中。对于每个产品,我都试图显示产品详细信息,如产品名称、价格和折扣等。我通过以下代码执行此操作。

它工作正常。如果类名类似于“fashion-item”或“fashion-item-first”,那么所有这些都可以正常工作。但是,如果类名包含单词之间的空格,则不会将任何产品存储在数组 ($products) 中,即 $products 的数组长度为零。我的问题是,如果类名像这样的“时尚项目优先”,如何做同样的事情。我尝试了很多,但我没有任何想法。请帮我。

0 投票
1 回答
956 浏览

javascript - 如何捕获我的 jsdom.jqueryify 回调引发的错误?

此代码在 node.js 中运行时的输出是最后一行(第 9 行)发生的错误的堆栈跟踪。第 7 行发生的错误以某种方式被节点“吸收”。即使我将它包装在 try/catch 语句中,我似乎也无法像从节点的默认错误处理代码中那样获得详细的堆栈跟踪输出。

如何在第 7 行捕获错误并从第 9 行获取尽可能多的详细信息?

(注意:这是一个简化的示例,来自我正在编写的一个更复杂的脚本,其中错误发生在“深度”嵌套堆栈中,该堆栈是由于从 jQueryify 回调中调用而形成的,并且调试它是现在绝对痛苦,无法获得有关错误的详细统计信息)

0 投票
1 回答
733 浏览

node.js - jsdom hashchange 事件

jsdom文档上:

更改其哈希:

不会触发任何'hashchange'事件window

有人知道解决方法吗?

谢谢

0 投票
1 回答
175 浏览

jquery - 使用 JQuery 时如何停止 jsdom 自动限定 href 结果?

该脚本使用 jsdom 和 jquery 来获取 a 标签的 href 属性的值。出于某种原因,相对于我在其中运行脚本的路径,它完全合格。我怎样才能获得 href 值,而不是完全合格的?

(代码片段也在https://gist.github.com/2355968

0 投票
3 回答
8130 浏览

javascript - Node.js jsdom 错误

我正在尝试让 jsdom 工作:)

这是代码:

这是错误:

我检查了页面是否被获取以及 jquery 库是否被解析——它们是。

我们可以看看 jsdom.js 的实现:

似乎 .createWindow() 不成功......

我在Cloud9上运行它。

欢迎任何帮助。

0 投票
2 回答
5773 浏览

javascript - jsdom 不处理网页内的脚本

我是nodejs的新手。我想使用 jsdom 来解析一些可能包含脚本代码的网页。但我得到错误说函数或变量没有定义。任何人都可以为此提供一些指导。

我的代码

和这里的html页面

并在下面收到错误消息

它报告未定义加载函数,但实际上已在网页中声明。

任何人都可以提供一些建议,或者只是简单地告诉我 jsdom 无法处理嵌入在页面中的脚本。