我正在為我們的區塊鏈驗證器制作一個監控工具。
此工具將從url (example) 抓取 HTML 并檢查綠色跨度是否Active存在。我正在使用puppeteer爬行,但我有一個問題。
當我在主機上運行下面的代碼時,它能夠獲取元素。但是,當我在遠程服務器上運行它時,它會顯示錯誤:
err: {
"type": "Error",
"message": "Error: failed to find element matching selector \".cmuk-badge\"",
"stack":
Error: Error: failed to find element matching selector ".cmuk-badge"
at ElementHandle.$eval (/home/ec2-user/validator-crypto-checker/node_modules/puppeteer/src/common/JSHandle.ts:1032:13)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
}
服務器
Amazon Linux 2
Node v12.22.12
Dependencies installed following: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#chrome-headless-doesnt-launch-on-unix
代碼:
const browser = await Puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(url);
try {
const activeElement = ".cmuk-badge";
const activeStatus = await page.$eval(
activeElement,
(node) => (<HTMLElement>node).innerText
);
logger.info(activeStatus)
if (activeStatus !== "Active") throw new Error("Died");
logger.info("Validator ok");
} catch (err) {
logger.error(err);
}
await browser.close();
uj5u.com熱心網友回復:
我沒有使用 JSX,但這對我來說很好用
import Puppeteer from 'puppeteer';
const url = "https://explorer.persistence.one/validators/persistencevaloper1hndk2s0dx9p0pxd9pxwmls3eywpdu5ha76kpqs";
const browser = await Puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(url);
const badge = await page.waitForSelector('.cmuk-badge');
const activeStatus = await badge.evaluate(node => node.innerText);
console.log(activeStatus)
await browser.close();
當我運行以下命令時,沒有記錄任何內容。
await page.$eval(
'.cmuk-badge',
node => console.log(node)
);
所以也許你可以只使用waitForSelectorandevaluate而不是 $eval。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/466437.html
標籤:javascript 节点.js 打字稿 傀儡师
上一篇:使用洗掉關鍵字,在javascript中為物件文字分配未定義的值有什么區別?[復制]
下一篇:ReactJS中的文本替換
