2

NodeJS、PhantomJS、Cheerio によるコンテンツ解析

動的に読み込まれた div(hint) を含む Web ページを解析する必要があります。イベントは多くのテーブル td に存在する可能性があります。例を次に示します。

ここに画像の説明を入力

特定の td に「マウスオーバー」すると、このオレンジ色のブロックにデータが表示され、次のように関数が動的にロードされます

onmouseover="page.hist(this,'P-0.00-0-0','355svxv498x0x0',417,event,0,1)"

この情報は、ページが読み込まれた後にのみ表示できます。特定の行に必要, 唯一のマラソンベット.

関数が実行されると、テキストが別の div (id='tooltip') に読み込まれ、ユーザーに表示されます。

ファントムを使用してこのページのコンテンツを解析し、静的な値ですべて問題ありませんが、この動的に生成されたブロックをノードルーター内のレンダリングされた Web ページに受け取るにはどうすればよいですか? 私は2つの方法を見ます:

  1. この座標上でマウスの動きをエミュレートして、必要なテキストを表示しますが、問題があります。座標を知るにはどうすればよいですか?
  2. ページが読み込まれた後に関数の開始をエミュレートし、コード ('355svxv498x0x0',417) を知っていますが、この関数をノード、ファントムから実行するにはどうすればよいですか?

    ルーターで静的ページコンテンツを受信するコードを次に示します

```

phantom.create(config.phantomParams).then(ph => {
    _ph = ph;
    return _ph.createPage();
}).then(page => {
    _page = page;
    return _page.on('onConsoleMessage', function (msg) {
        console.log(msg);
    });
}).then(() => {
    return _page.on('viewportSize', {width: 1920, height: 1080});
}).then(() => {
    return _page.on('dpi', 130)
}).then(() => {
    _page.setting('userAgent', config.userAgent);
    return _page.open(matchLink);
}).then(() => {
    return _page.property('content');
}).then(content => {
    let $ = cheerio.load(content);

    // working with content and get needed elements

    console.log($.html());
}).then(() => {
    _page.close();
    _ph.exit();
});

``` Casper/Spooky を使用する必要がありますか、それともこの場合の使用方法を説明できる人はいますか?

アップデート。操り人形師、コードで試す

```

let matchLink = 'http://www.oddsportal.com/soccer/world/club-friendly/san-carlos-guadalupe-xnsUg7zB/';

(async () => {
    const browser = await puppeteer.launch({
        args: [
            '--proxy-server=46.101.167.43:80',
        ]});
    const page = await browser.newPage();
    await browser.userAgent(config.userAgent);
    await page.setViewport({width: 1440, height: 960});
    await page.goto(matchLink);
    await page.evaluate(() => page.hist(this,'P-0.00-0-0','355svxv464x0x7omg7',381,event,0,1));

    let bodyHTML = await page.evaluate(() => document.body.innerHTML);

    console.log(bodyHTML);
    await page.screenshot({path: 'example.png'});

    await browser.close();
})();

```

取得 ```

(node:8591) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'stopPropagation' of undefined
    at toolTip (http://www.oddsportal.com/res/x/global-180713073352.js:1:145511)
    at TableSet.historyTooltip (http://www.oddsportal.com/res/x/global-180713073352.js:1:631115)
    at PageEvent.PagePrototype.hist (http://www.oddsportal.com/res/x/global-180713073352.js:1:487314)
    at __puppeteer_evaluation_script__:1:13
    at ExecutionContext.evaluateHandle (/home/gil/Projects/oddsbot/node_modules/puppeteer/lib/ExecutionContext.js:97:13)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

```

対象の JS ファイルにエラーがあります。リクエストに何か問題がある可能性があります。

4

1 に答える 1