javascript - 使用 Puppeteer 进行 DOM 选择
问题描述
尝试从 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 尝试过,但也没有用....
解决方案
我为你做了这个
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()
})()
推荐阅读
- python - 在熊猫数据框中给出指定的产品ID时如何返回特定的评论数据
- batch-file - 将 echo 命令插入到正在运行的命令行中
- video-streaming - 我在哪里可以找到 Agora HTTP 基本授权令牌?
- sql - 多部分标识符无法在 SQL Server 中绑定并混淆
- intellij-idea - Intellij Plugin PsiViewer 在调试插件时不显示
- laravel - 在 laravel 中验证时出现致命异常“Method Illuminate\Validation\Rules\RequiredIf::__toString() 不得抛出异常”
- rust - 指向具有生命周期参数的方法的函数指针的类型
- ionic-framework - 如何在带电容器的 Ionic 5 项目中使用 Pushwoosh
- arrays - 处理:有没有办法将我的形状放入一个循环中并使我的代码更短?
- c# - 基于任务的行为正在阻塞父线程