2011-05-08 4 views
3

NodeJs 및 ZombieJS를 사용하여 가상 브라우저 환경에서 URL 요청을 가져옵니다. 내가 URL을 인출하려고 할 때 다음과 같은 오류가 표시좀비 오류 - http 요청을 가져 오는 중 오류가 발생했습니다.

var zombie = require('zombie'), 
jsdom = require('jsdom'), 
my_sandbox = require('sandbox'), 
url = require('url'), 
http = require('http'), 
request = require('request'), 
httpProxy = require('./lib/node-http-proxy'), 
des = '', 
util = require('util'), 
colors = require('colors'), 
is_host = true; 

var s = new my_sandbox(); 
var browser = new zombie.Browser; 

httpProxy.createServer(9000, 'localhost').listen(8000); 

function zombieFetching(page) { 
    browser.visit(page, { debug: false }, 
    function(err, browser, status) { 
     if(err) { 
     console.log('There is an error. Fix it'); 
     throw(err.message); 
     } else { 
      console.log('Browser visit successful') ; 
     } 
    }); 
} 

var server = http.createServer(function (req, res) { 
    var pathname = ''; 

    if(is_host) { 
     dest = req.url.substr(0, req.url.length); 
     pathname = dest; 
     is_host = false; 
    } else { 
     pathname = req.url.substr(0, req.url.length); 
     if(pathname.charAt(0) == "/") { 
      console.log('new request'); 
      console.log(pathname); 
      pathname = dest + pathname; 
     } 
    } 

    request.get({uri: pathname}, function (err, response, html) { 
      console.log('The pathname is:::::::::: ' + pathname); 
      zombieFetching(pathname); 
      res.end(html); 
    }); 
}); 

server.listen(9000); 

: "www.yahoo.com"또한

home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:62 
       throw(e); 
    ^
Error: undefined: Invalid character in tag name: �� 
    at Object.createElement (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/jsdom/lib/jsdom/level1/core.js:1174:13) 
    at TreeBuilder.createElement (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/treebuilder.js:29:25) 
    at TreeBuilder.insert_element_normal (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/treebuilder.js:61:21) 
    at TreeBuilder.insert_element (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/treebuilder.js:52:15) 
    at Object.startTagOther (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/parser/in_body_phase.js:483:12) 
    at Object.processStartTag (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/parser/phase.js:43:44) 
    at EventEmitter.do_token (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/parser.js:94:20) 
    at EventEmitter.<anonymous> (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/parser.js:112:30) 
    at EventEmitter.emit (events.js:64:17) 
    at EventEmitter.emitToken (/home/seed/Desktop/Cloud project/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:84:7) 

, 로그 문

나는 다음과 같은 코드를 사용하고

The pathname is:::::::::: http://www.yahoo.com/ 
The pathname is:::::::::: http://l1.yimg.com/a/i/ww/news/2011/05/06/zuckhouse-sm.jpg 
The pathname is:::::::::: http://l1.yimg.com/a/i/ww/news/2011/05/07/cable-sm.jpg 
The pathname is:::::::::: http://l.yimg.com/a/a/1-/flash/promotions/yahoo/081120/70x50iltlb_2.jpg 

Browser visit successful 

Browser visit successful 

Browser visit successful 

Browser visit successful 

The pathname is:::::::::: http://l.yimg.com/a/i/vm/2011may/bird74.jpg 
The pathname is:::::::::: http://www.yahoo.com/jserror?ad=1&target=cms&data=FPAD 

내가 알기로는 처음 네 번의 요청이 성공적으로 처리되었습니다. 좀비가 잘못된 요청을 가져 오는 이유 그러나, 나는 확실하지 않다 :

또한
"http://www.yahoo.com/jserror?ad=1&target=cms&data=FPAD" 

은 무엇 태그 이름에 오류가있는 잘못된 문자를 일으키는?

감사합니다, 소니

+0

URL을 요청하면 http://unixhelp.ed.ac.uk/CGI/man-cgi?grep에 오류 로그가 표시됩니다. throw (err.message); ^ http://unixhelp.ed.ac.uk/favicon.ico에서 리소스를로드 할 수 없습니다. 404가 있습니다.이 URL은 유효하지 않으며이 요청을 가져 오는 이유가 확실하지 않습니다. 이것이 노드/좀비의 버그인지 아니면 내 코드에서 문제가 있는지 확실하지 않습니다. – sony

답변

0

favicon.ico 항상 브라우저에 의해 요청; 좀비가이 동작을 올바르게 에뮬레이션하고 있습니다. HTTP 프로토콜은 어디에도 없지만 브라우저에서하는 경향이 있기 때문에이를 지원하는 사이트의 주소 표시 줄에 멋진 아이콘을 표시합니다. 좀비가 해당 URL에 301 (리디렉션)을 수신하여 맹목적으로 따라 다니거나 페이지의 다른 요소가이를 참조하고 있기 때문에 아마도 jserror? 요청이 표시됩니다. 기본적으로 Zombie의 핸들러는 모든 것을 따르려고하므로 브라우저와 마찬가지로 이미지를 가져 오는 것입니다.

내가 browser.debug = true으로 설정하면 로그 진술에서 제공하는 것보다 훨씬 많은 정보를 얻을 수 있다고 생각합니다.

관련 문제