Tag: jsdom

发生了Node.js + jQuery错误

我想从数据库中检索数据,并通过数据生成html文件。 然后从JavaScript连接数据库我使用Node.js包“pg”,并使用jQuery的HTML文件。 但错误“jQuery需要一个带有文档的窗口”已经发生。 我的源代码如下 server.js var pg = require('pg'); var http = require('http'); var $ = require('jquery'); var fs = require('fs'); var conString = "postgres://uname:@localhost:5432/shop"; var server = http.createServer(); server.on('request', doRequest); server.listen(3000, 'localhost'); function doRequest(request, response) { var client = new pg.Client(conString); client.connect(function(err) { if(err) { return console.error('could not connect to postgres', err); } client.query('…', […]

无法parsing不正确的格式的HTML

这是我的node.js程序: var jsdom = require('jsdom'); var site = 'http://www.lefigaro.fr/international/2011/08/09/01003-20110809ARTFIG00389-un-premier-mort-dans-les-emeutes-en-grande-bretagne.php'; var jquery = 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'; jsdom.env(site, [jquery], function(error, window) { console.log(error); console.log(window.$); }); 和输出: /home/matt/Desktop/nodejs/node_modules/jsdom/lib/jsdom.js:245 window.document.documentElement.appendChild(script); ^ TypeError: Cannot call method 'appendChild' of null at /home/matt/Desktop/nodejs/node_modules/jsdom/lib/jsdom.js:245:41 at Array.forEach (native) at /home/matt/Desktop/nodejs/node_modules/jsdom/lib/jsdom.js:230:22 at [object Object].callback (/home/matt/Desktop/nodejs/node_modules/jsdom/lib/jsdom.js:289:17) at [object Object].<anonymous> (/home/matt/Desktop/nodejs/node_modules/request/main.js:294:21) at [object Object].emit (events.js:64:17) at IncomingMessage.<anonymous> (/home/matt/Desktop/nodejs/node_modules/request/main.js:281:54) at […]

Node.js:JSDOM删除内联事件

在原始html上使用JSDOM模块时,它将删除任何内联事件的痕迹。 我不确定为什么会这么随便这么做。 有没有人find一种方法来解决这个问题,或者是我做错了什么? 例: var jsdom = require('jsdom'); jsdom.defaultDocumentFeatures = { FetchExternalResources : false, ProcessExternalResources : false, MutationEvents : false, QuerySelector : false }; var body="<a onclick='foo();'>FOO</a>"; var window = jsdom.jsdom(body).createWindow(); console.log(window.document.innerHTML); 这个代码会输出 <a>FOO</a>

nodejs中的汉字响应写入

我不能使用nodejs显示中文字符响应浏览器? jsdom.env({ html: 'http://www.baidu.com', scripts: ['http://code.jquery.com/jquery-1.6.min.js'] }, function (err, window) { //Use jQuery just as in a regular HTML page var $ = window.jQuery; res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" }); res.end($('title').text()); }); 错误的结果: ٴ ٴ һ ֪ 正确的结果应该是:百度一下,你就知道

node.js – 如何使用jsdom / node-jquery来更新我的页面的外观?

似乎我所能find的所有文件都是关于“抄写人们的页面”的信息。 我想要使​​用jsdom或node-jquery来更新用户所在的页面。 我知道当我编写代码的时候,我只需要一个普通的<script>标签链接到公共目录中的JavaScript文件,但是我想学习如何从服务器上做到这一点,甚至是可能的。 我真正想要的是允许多个用户连接到一个页面,并为所有用户在一个用户执行操作时更新页面。 例如,button1将背景变成黑色。 button2将其变为红色,button3将其变成白色。 并纠正我,如果我错了,但我不认为这是可能的链接到一个JavaScript文件通过<script>标记。 所以看着jsdom : jsdom.env({html: ???, src: jquery, done: callback }); 好的,这是问题1 。 我不知道该怎么把html放在这个代码中来获得我的DOM对象,或者我可以做什么。 我的文件是用jade写的,所以我不能从文件中加载它们。 然后我开始考虑,也许我可以把这段代码放在代码的路由部分,并从reqvariables中获取html。 所以我开始玩我的路由代码: exports.index = function(){ res.render('index', {title: 'MyTitle'}); }; 让我只是说,这个整个路由的事情已经让我头脑发热了。 我试图第二次res.render ,但这是行不通的。 这导致问题2 。 即使我可以获取DOM对象并操作它们,我也不知道如何将它们推回给客户端,因为执行第二个res.render不起作用。 更何况这样做会打败这个目的,因为如果我把它们重新渲染,我可能会把它们redirect到另一个页面。 我打算使用socket.io来处理用户连接,所以也许关键在于那里。 也许我可以设置一个socket.on('button_click', function(){ … }); 但我不知道该怎么把这个函数放在DOM中来处理和更新DOM,或者在客户端如何让button发出'button_click'因为客户端不能访问socket.iovariables。 所以如果有人能帮我解释一下这些东西,那么这个例子会非常棒。 我真的试图想出所有这些,我花了几天的时间研究和阅读node.js,express.js,socket.io,jsdom和node-jquery的API文档。 看来,我发现的所有例子都是非常基础的,只是他们自己的领域而已,没有任何事例可以把它们联系在一起。

为什么“基地”标记是防止jsdom.env工作?

更新: 我发现页面中使用的标记“base”,我没有运行jQuery。如果网站包含该标记,jsdom将不起作用。 虽然我不知道为什么。 <base href="http://bbs.18183.com/" /> 为了validation这一点,我创build了一个全新的HTML文件,并放入一个里面,jsdom然后失败。 我目前在玩Node.js,在阅读了如何使用Node.js和jQuery来抓取网页之后,我决定为我创build一个。 所以我安装了express,jsdom和很多东西,发现抓取网页真的很方便。 但后来我发现了一个奇怪的情况,某个特定的页面不能被抓取,而是提示错误如下: var title = $('title').text(); ^ TypeError: undefined is not a function at H:\animalwar\personal\node\getter\app.js:82:23 at exports.env.exports.jsdom.env.scriptComplete (H:\animalwar\personal\node\ getter\node_modules\jsdom\lib\jsdom.js:207:39) at process.startup.processNextTick.process._tickCallback (node.js:244:9) 这是我的代码: request({ url:'http://bbs.18183.com/'}, function (err, response, body) { if(err && response.statusCode !== 200){ console.log('Connection Failure! Fuck GFW'); res.end('Connection Failure! Fuck GFW'); return; } jsdom.env({ html: […]

如何使用jsDom – node.js来操作svg?

我有以下的svg文件 FileName : seatLayout.svg <?xml version="1.0" encoding="utf-8"?> <!– Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) –> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="800px" height="600px" viewBox="0 0 800 600" enable-background="new 0 0 800 600" xml:space="preserve"> <g id="111"> <rect x="130" y= "130" height="320" […]

在cloudfoundry JSDOM scraping不起作用

我使用的jsdom node.js模块的应用程序,做一些网页抓取,以获得所需的一些数据。 当我在本地运行时,这工作得很好。 但是,当我将应用程序推向cloudfoundry时,它崩溃了。 日志如下: ====> /logs/stderr.log <==== /var/vcap/data/dea/apps/caretogethersandbox-0-8b20af9255bbf552d0f490cb60d0df55/app/node_modules/jsdom/lib/jsdom.js:171 features = JSON.parse(JSON.stringify(window.document.implementation._fea ^ TypeError:无法读取未定义的属性“实现” 有什么我在这里失踪? 我很难过 我知道我写的代码工作正常,这似乎是模块和cloudfoundry之间的问题。

使用基于浏览器的模板引擎从网站中删除数据

试图从浏览器中使用大量JS的页面中取消数据。 而当用jsdom播放无法获得任何数据,也许页面没有足够的时间来加载或渲染。 在这种情况下如何报废数据:使用计时器或按要求下载所有页面 jsdom.env({ url: link, scripts: ["http://code.jquery.com/jquery.js"], done: function (errors, window) { var $ = window.$; var date = $('.date').text(); console.log(date); } });

使用jsdom时出现“调度事件”DOMNodeInsertedIntoDocument“失败”错误

我正在考虑使用JSDom的项目,需要刮一个网站。 我开始尝试一个亚马逊网页。 这是一个示例代码: jsdom.env(url, ["http://code.jquery.com/jquery.js"], function(errors, window) { console.log(errors); var $ = window.$, results = parseResultsPage($); //do some stuff window.close(); }); 起初,我有一个if(errors.length > 0) …子句,但事实certificate, errors总是充满的。 即使拼抢本身有效,我得到所有我需要的结果,我总是得到: [ { type: 'error', message: 'Dispatching event \'DOMNodeInsertedIntoDocument\' failed', data: { error: [Object], event: [Object] } } ] 这意味着我无法有效地testing错误。 简单地忽略这个错误对我来说是不安全的。 有什么build议么? 这可能是亚马逊相关的问题吗? (他们在他们的页面上使用jQuery 1.2.6) 更新 : 在JSDom github页面( […]