使用操纵符进行DOM选择

时间:2019-11-17 00:50:15

标签: javascript node.js puppeteer

尝试从coinfarm.online抓取某些内容时,我总是遇到错误。所以我要最后的价格。当我在浏览器中的控制台上尝试它时,它可以完美地工作,但是使用此脚本,我总是会报错或为空。

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto("https://coinfarm.online", { waitUntil: "load", timeout: 0 });

  const example = await page.evaluate(
    () => document.querySelector("#xbt_last").innerText
  );

  console.log("Price: " + example);

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

我也用XPath尝试过,但是也没用。...

1 个答案:

答案 0 :(得分:0)

我为你做了

const puppeteer = require ('puppeteer')
const uaString = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3882.0 Safari/537.36'

;(async () => {
    const browser = await puppeteer.launch ({
        headless : true,
        devtools : false
    })
    const [page] = await browser.pages()

    page.setDefaultNavigationTimeout(0)
    page.setUserAgent(uaString)
    page.setRequestInterception(true)

    page.on('request', async request => {
        if ( request.resourceType() === 'image' || request.resourceType() === 'font' || request.resourceType() === 'media' ) {
            request.abort ()
        } else {
            request.continue ()
        }
    })

    const open = await page.goto ('https://s.tradingview.com/embed-widget/tickers/?locale=en#%7B%22symbols%22%3A%5B%7B%22description%22%3A%22BitMex%20XBT%22%2C%22proName%22%3A%22BITMEX%3AXBTUSD%22%7D%2C%7B%22description%22%3A%22Binance%20USDT%22%2C%22proName%22%3A%22BINANCE%3ABTCUSDT%22%7D%2C%7B%22description%22%3A%22BitFinex%20USDT%22%2C%22proName%22%3A%22BITFINEX%3ABTCUSD%22%7D%2C%7B%22description%22%3A%22BitFlyer%20JPY%22%2C%22proName%22%3A%22BITFLYER%3ABTCJPY%22%7D%5D%2C%22width%22%3A%22100%25%22%2C%22height%22%3A72%2C%22utm_source%22%3A%22coinfarm.online%22%2C%22utm_medium%22%3A%22widget%22%2C%22utm_campaign%22%3A%22tickers%22%7D', {timeout: 0, waitUntil: 'networkidle0'})
    const wait = await page.waitForSelector('.tv-ticker-item-change__last')
    const eVal = await page.evaluate( () => document.querySelectorAll('.tv-ticker-item-change__last')[0].innerText )

    console.log ( parseFloat( eVal ) )

    const exit = await browser.close()
})()