ページにアクセスし、ページ上のすべてのリンクを見つけて開き、各子ページが 200 を正常に返すように、zombie.js を使用して Node で簡単なユーティリティを構築しようとしています。
これは、stackoverflow.com のホームページをクロールするこのコード (CoffeeScript で記述) の例です。
Browser = require('zombie')
browserOpts =
runScripts: false
site: 'http://www.stackoverflow.com'
home = new Browser browserOpts
home.visit '/', (e, browser) ->
questions = browser.queryAll '#question-mini-list .summary h3 a'
for q in questions
qUrl = q.getAttribute 'href'
page = new Browser browserOpts
page.visit qUrl, (e, browser, statusCode, errors) ->
console.log "Arrived at page #{browser.window.location} and found " + browser.html().length + " bytes"
console.log statusCode
browser.dump()
return
return
このコードを実行しようとすると、最初のいくつかのリンクが正しく読み込まれ、ページのバイト数が表示されることがわかります。
ただし、成功したページのロードの最初のバッチ (サイズはランダムに見える) の後、後続のすべてのページのロードはコールバックをvisit
途中で実行するように見えます。ドキュメントは空 (ただの<html><head></head><body></body></html>
) でstatusCode
、コールバックへの引数は ですundefined
。
なぜこれが起こっているのかを説明したり理解したりすることはできません。どんなヒントでも大歓迎です。