Tag: jsdom

jsdom / cheerio大大改变HTML

我想刮一个网站,我有问题与jsdom和cheerio戏剧性地改变他们得到的html。 最值得注意的是,他们删除了一些标签,如table / tr / td标签等 只要有一个本地文件说1.html和做: // with cheerio -> or equivalent with jsdom var $ = require('cheerio').load(fs.readFileSync(path)); fs.writeFileSync('2.html', $.html()); # bash $> diff 1.html 2.html ….. < <tr><td colspan="5"><a id="stats" name="stats"></a><div class="titlebar1" style="margin-top: 12px;margin-bottom: 4px;"><h2>Stats</h2><div class="element"><img src="img/element/10.png" /></div><div class="elementborder"><img src="img/elementborder.png" /></div></div></td></tr></table></td></div> — > <tr><td colspan="5"><a id="stats" name="stats"></a><div class="titlebar1" style="margin-top: 12px;margin-bottom: 4px;"><h2>Stats</h2><div class="element"><img src="img/element/10.png"></div><div […]

JSDom不加载相关的脚本

所以我试图用jsdombuild立一个摩卡testing,经过多次debugging,我把问题的范围缩小到jsdom执行绝对URL脚本(例如http://code.jquery.com/jquery-2.1.3.min.js ),但不是相对的URL脚本(例如js/script.js )。 我的test.js如下: var assert = require("assert"); var fs = require('fs'); var jsdom = require("jsdom"); describe('Foo Test', function(){ it('Foo Check', function(done){ this.timeout(5000); jsdom.env({ html: fs.readFileSync('index.htm') ,features: { FetchExternalResources: ["script"] ,ProcessExternalResources: ["script"] } ,done: function(errors, window){ if(errors != null) console.log('Errors', errors); var $ = window.$; // $ is defined var foo = window.foo; //foo is […]

通过JSDom的JQuery不是一个赋予TypeError的函子

IO.js 1.3.0在Windows上使用带有Mocha 2.0.1的JSDOM 4.0.1和jQuery 2.1.1 以下代码: var chai = require('chai'); var jsdom = require('jsdom'); describe('JSDOM', function () { var $; beforeEach(function () { global.document = jsdom.jsdom('<html><body><section id="banner"></section></body></html>'); global.window = global.document.defaultView; global.navigator = global.window.navigator; $ = global.jQuery = require('jquery')(global.window); }) it('Using jquery', function () { var dom = $("#banner"); }); }); 当使用JQueryselect器作为函子时(例如$(…)), TypeError:object的错误不是函数 。 任何人遇到这个,并有一个解决方法?

Quill.js和zombie.js

试图在zombie.js无头浏览器中testingquill.js编辑器(contenteditable div)。 抱怨关于document.getSelection丢失 抱怨关于document.createTreeWalker丢失 如果我使用编辑器的DOM节点手动分派更改事件,似乎没有响应。 任何人都知道如何做这个工作?

无法与node.js安装jquery – 无法加载Contextify

更新 – 请参阅post的底部 我试图在node.js中设置jquery,并有一些麻烦。 如上所述,我正在安装jquery与npm install jquery并执行我的JavaScript作为脚本从命令行,而不是运行它作为服务器。 有几点需要注意: OS X 10.7.3 node.js版本0.6.11 npm版本1.1.1 节点waf版本1.5.16 所以,从包含我的节点脚本的目录,我npm install jquery 。 terminal然后closures5秒钟,并做了一些事情,特别是,下载模块和构buildcontextify。 最后,消息'build' finished successfully 。 另外,从安装日志中我看到: htmlparser 1.7.4 jsdom 0.2.10 我尝试运行我的脚本: ./script.js ,但是这是输出: Internal Contextify ERROR: Make sure Contextify is build with your current Node version. To rebuild, go to the Contextify root folder and run 'node-waf […]

如何在Node.js中高效地进行网页抓取?

我试图从购物网站Express.com刮取一些数据。 以下是许多含有图片 , 价格 , 标题 , 颜色的产品中的一种 。 <div class="cat-thu-product cat-thu-product-all item-1"> <div class="cat-thu-p-cont reg-thumb" id="p-50715" style="position: relative;"><a href="/rocco-slim-fit-skinny-leg-corduroy-jean-50715-647/control/show/3/index.pro" onclick="var x=&quot;.tl(&quot;;s_objectID=&quot;http://www.express.com/rocco-slim-fit-skinny-leg-corduroy-jean-50715-647/control/show/3/index.pro_1&quot;;return this.s_oc?this.s_oc(e):true"><img class="cat-thu-p-ima widget-app-quickview" src="http://t.express.com/com/scene7/s7d5/=/is/image/expressfashion/25_323_2516_900/i81?$dcat191$" alt="ROCCO SLIM FIT SKINNY LEG CORDUROY JEAN"></a><a href="#jsLink"><img id="widget-quickview-but" class="widget-ie6png glo-but-css-off2" src="/assets/images/but/cat/but-cat-quickview.png" alt="Express View" style="position: absolute; left: 50px;"></a></div> <ul> <li class="cat-cat-more-colors"> <div class="productId-50715"> <img class="js-swatchLinkQuickview" title="INK BLUE" src="http://t.express.com/com/scene7/s7d5/=/is/image/expressfashion/25_323_2516_900_s/i81?$swatch$" width="16" […]

jQuery发现在Node.js中无法正常工作

我正在使用jQuery来查询Node.js中由jsdom创build的dom: var html = '<p class="widget">one</p><p class="widget">two</p><p class="widget">three</p>'; var jsdom = require('jsdom'); var jquery = require('jquery'); var document = jsdom.jsdom(html); var widgets = jquery(document.parentWindow).find('.widget'); var arr = widgets instanceof Array; //true widgets.each(function() { }) //each is not defined, its not a jquery object 我知道这个文件很好。 它包含3个元素与类widget 。 但是,jQuery的find函数返回这些dom元素的常规JS数组,而不是一个包装了dom元素集合的jQuery对象。 显然,由于返回值是一个JS数组,所以我不能链接更多的jQuery函数。 我得到的错误是: TypeError: Object [object HTMLDivElement],[object HTMLDivElement],[object HTMLDivElement] […]

为什么使用ReactTestUtils将iframe渲染成jsdom不提供contentWindow?

我试图testing一个呈现iframe的React组件,并直接向该iframe注入标记。 (我不想在iframe中加载一个URL。) 该组件实际上在浏览器中运行得非常好,但是迄今为止对其进行testing似乎是不可能的。 我不知道为什么。 这是一个缩短的testing用例,certificate失败。 // Set up DOM var jsdom = require( 'jsdom' ).jsdom; global.document = jsdom( '' ); global.window = document.defaultView; global.navigator = document.defaultView.navigator; // Prepare React var ReactTestUtils = require( 'react-addons-test-utils' ); var React = require( 'react' ); var Frame = React.createClass( { componentDidMount() { console.log( 'iframe loaded. adding content' ); const […]

node.js:jsdom的问题 – jQuery对象返回undefined

我有兴趣为一个项目做一些服务器端DOM操作,所以我决定看看node.js ,特别是在jsdom 。 我对node.js完全陌生,所以可能我的错误是显而易见的,但从来没有我不能find解决scheme,我的问题在任何地方… 首先,我在本地运行Windows上的节点,并使用在线IDE Cloud9 值得一提的是,由于所需的依赖关系文档不能在Windows下编译(需要C ++和Python,而且我发现npm不支持构buildC ++包),所以我得到了麻烦,安装了最新的jsdom节点包(0.2.15) 。 所以我采取了两种替代方法: 我已经安装了一个不依赖于symxtify的旧版本,即jsdom@0.2.1 。 这里是我目前有的npm列表 └─┬ jsdom@0.2.1 ├── cssom@0.2.5 ├── htmlparser@1.7.6 └── request@2.10.0 当我试图运行简单的testing脚本从jsdom github回购 cloud9返回此警告 The "sys" module is now called "util". It should have a similar 我试图解决这个问题,replace所有提到的系统为util,错误消失…(仍不太确定这是正确的事情虽然…)。 所以,最后当我试图运行这个片段 var jsdom = require("jsdom"); jsdom.env("http://nodejs.org/dist/", [ 'http://code.jquery.com/jquery-1.5.min.js' ], function(errors, window) { console.log("there have been", window.$("a").length, "nodejs […]

Zombieasynchronous加载多个JS文件

尝试僵尸几个小时,并兴奋的方式。 唯一的问题是,脚本似乎是asynchronous加载(这很酷),并按照它们下载的顺序(而不是按照“原始”HTML文件中提到的顺序)执行。 我会解释: <head> <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.js"></script> <script>alert($('body'))</script> </head> http://jsfiddle.net/viebel/GWYEj/ – 下面的脚本加载jQuery并尝试使用它。 下载jQuery需要时间,但僵尸似乎在下载完成之前进入下一个脚本部分。 很显然,没有jQuery没有太多的意义(“身体”),因此我们得到以下错误: Zombie: GET http://jsfiddle.net/viebel/GWYEj/show/ Zombie: GET http://jsfiddle.net/viebel/GWYEj/show/ => 200 Zombie: GET http://jsfiddle.net/js/lib/mootools-core-1.4.4.js Zombie: GET http://code.jquery.com/jquery-1.7.1.js Zombie: GET http://jsfiddle.net/js/lib/mootools-core-1.4.4.js => 200 Zombie: Unexpected token } SyntaxError: Unexpected token } at Object._evaluate (/home/viebel/node_modules/zombie/lib/zombie/browser.coffee:136:28) in http://jsfiddle.net/viebel/GWYEj/show/:undefined:undefined<script> Zombie: GET http://code.jquery.com/jquery-1.7.1.js => 200 在“常规”浏览器中,代码stream畅运行。 是的,我们知道node.js不是真正的客户端JavaScript,但是Zombie.js应该是,不是吗? 请协助我们做错了什么。