2016-09-16 16 views
1

スクレイピングのためにNode.jsにヘッドレスSeleniumを使用する必要があります。私はWebdriver.ioを試しましたが、ヘッドレスでないSeleniumで動作しました。しかし、私はヘッドレスセレンを実行すると、全く動作しませんでした。ここにコードがあります(webdriver.ioの例と同じです)Node.js Webdriver.io + Seleniumを使用したヘッドレスWebスクレイピング

webdriverio 
    .remote(options) 
    .init() 
    .url('http://www.google.com') 
    .getTitle().then(function(title) { 
    console.log('Title was: ' + title); 
}) 
    .end(); 

ヘッドレスセレンで動作させるにはどうすればいいですか?それとも何か別の選択肢がありますか?

答えて

-1

過去にさまざまなライブラリを使用してスクラップをたくさんしていましたが、ログインや操作が必要な場合を除き、requestcheerioを使用してスクレイピングを処理することをおすすめします。これにより、jQueryスタイルのフィルタリングを使用してコンテンツをスクラップすることができます。また、SeleniumやPhantomJSのようなものに依存することなくスクレイピングを実行することもできます。

クイック例:

request('http://www.google.com', (err, response, body) => { 
    if(err) console.error(err); 
    const $ = cheerio.load(body); 

    const title = $('title').text(); 
    console.log(`Title was: ${title}`); 
    // Or scrape whatever you want from the page 
}); 

あなたはログイン処理するために必要がある場合は、フォームを扱う、またはあなたがそれをこすりする前に、ライブラリの任意の数を試すことができますページ上の任意のアクションを実行します。私はまともな結果でZombie.jsを使用し、Selenium Nightmare(PhantomJSを使用)、PhantomJSなどを試しました。

最後にリクエストとCheerioによって、ページをすばやくすくい取ることが簡単にできました。

+0

私はcheerioを知っており、以前にリクエストして使用しました。要求に伴う問題は、ブラウザで見られるようにHTMLを返さないことがあるため、HTMLをCheerioで解析することは不可能です。たとえば、このページのindotrading.com/companycatalog/。私は、HTMLコードを取得し、cheerioでロードする方法を見つける必要があります。 – NoName2

+0

申し訳ありませんが、動的サイトを掻き集めるようです。[nightmarejs](https://github.com/segmentio/nightmare)はフレンドリーでしたが、PhantomJSの依存関係は嫌でした。 Zombie.jsはブラウザテストフレームワークに進化しましたが、別のツールキットに依存しないため、これまで何度も使用してきました。 – Ding

+0

fwiw、nightmare.jsにphantomjsの依存関係がなくなりました(約1年前に削除されました)。今は完全に電子で実行されています。 – reinpk

0

ヘッドレス環境でセレンをセットアップする必要があります。 xvfbを試してみてください - これはfirefoxのheadless guiです。

$ apt-get install fvfb -y 
$ DISPLAY=:1 xvfb-run java -Dwebdriver.gecko.driver=./geckodriver -jar selenium-server-standalone-3.0.1.jar 
関連する問題