2017-08-26 20 views
1

ArtooPuppeteerを使用できないようです。 npm install artoo-jsまで使ってみましたが動作しませんでした。私も、人形のコマンドpage.injectFile(filePath)を使ってbuild path distを注入しようとしました。運がない。これらの2つのlibsをうまく組み込むことができる人は誰ですか?もしそうなら、artooがどのように注入されたかのコードスニペットが大好きです。GoogleのPuppeteerでArtoo jsを使用してウェブを掻き集める

+0

私はあなたの質問に対する正確な答えを持っていけません。しかし、私は[Puppeteer&Chrome HeadlessでのWeb廃棄](https://medium.com/@e_mad_ehsan/getting-started-with-puppeteer-and-chrome-headless-for-web-scrapping-6bf5979dee3e)の記事を書いた。役に立つかもしれない。ありがとう。 – eMAD

答えて

3

私はちょうど私が私がここにあなたが:)

(ステップ0:あなたはそれを持っていない場合はYarnをインストールしてください)に行く、あまりにもArtooを試みることができる考え出し、another answerのための人形遣いを試してみました

yarn init 
yarn add puppeteer 
# Download latest artoo script, not as a yarn dependency here because it won't be by the Node JS runtime 
wget https://medialab.github.io/artoo/public/dist/artoo-latest.min.js 

index.jsでこれを保存します。

const puppeteer = require('puppeteer'); 
(async() => { 
    const url = 'https://news.ycombinator.com/'; 
    const browser = await puppeteer.launch(); 
    const page = await browser.newPage(); 
    // Go to URL and wait for page to load 
    await page.goto(url, {waitUntil: 'networkidle'}); 
    // Inject Artoo into page's JS context 
    await page.injectFile('artoo-latest.min.js'); 
    // Sleeping 2s to let Artoo initialize (I don't have a more elegant solution right now) 
    await new Promise(res => setTimeout(res, 2000)) 
    // Use Artoo from page's JS context 
    const result = await page.evaluate(() => { 
     return artoo.scrape('td.title:nth-child(3)', { 
      title: {sel: 'a'}, 
      url: {sel: 'a', attr: 'href'} 
     }); 
    }); 
    console.log(`Result has ${result.length} items, first one is:`, result[0]); 
    browser.close(); 
})(); 

結果:

$ node index.js 
Result has 30 items, first one is: { title: 'Headless mode in Firefoxdeveloper.mozilla.org', 
url: 'https://developer.mozilla.org/en-US/Firefox/Headless_mode' } 

これは見逃すにはあまりにも面白いです:今HackerNewsのトップ記事は、Firefoxヘッドレスについてです...

+0

ありがとう。私は間違ったファイルを注入していたようだ。 – jasan

+0

ええ、ArtooのNPMパッケージを使っていないのですが、ブラウザJS実行時にDOMからデータを抽出するのに適していないことを正しく理解していれば、ノードJSランタイムから他のXMLドキュメントからデータを抽出するのに適しています。私が使ったURLはブックマークレットで使っているURLです。 –

+0

Artooが初期化するのを待つことについては、単に page.waitFor(2000) – Ernest

関連する問題