提问人:Julian Singh 提问时间:9/7/2023 最后编辑:ggorlenJulian Singh 更新时间:9/7/2023 访问量:49
如何使用 Puppeteer 单击随机跨度元素
How to click a random span element with Puppeteer
问:
我正在尝试自动化机器人,以便在每次加载或刷新页面时在我的页面“KRC SEO TOOLS”上随机选择一个工具/链接,其中包含所有相同的跨度元素。我尝试了很多方法,但一直失败。任何帮助将不胜感激。请看一下图像元素。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false, slowMo: 100, // Uncomment to visualize test
});
const page = await browser.newPage();
// Load "https://www.krcinfo.com/"
await page.goto('https://www.krcinfo.com/');
// Resize window to 1920 x 923
//await page.setViewport({ width: 1920, height: 923 });
// Scroll wheel by X:0, Y:300
await page.evaluate(() => window.scrollBy(0, 300));
// Click on a random link or tool
await page.waitForSelector('.tool_des')
await Promise.all([
page.click('.tool_des'),
page.waitForNavigation()
]);
await page.waitForTimeout(5_000)
await browser.close();
})();
答:
1赞
ggorlen
9/7/2023
#1
您可以使用从 JavaScript 数组中获取随机值,对提取的 ElementHandles 数组进行提取:page.$$
const puppeteer = require("puppeteer"); // ^21.0.2
const url = "https://www.krcinfo.com/";
let browser;
(async () => {
browser = await puppeteer.launch();
const [page] = await browser.pages();
await page.goto(url, {waitUntil: "domcontentloaded"});
const els = await page.$$(".tool_des");
const navP = page.waitForNavigation({waitUntil: "domcontentloaded"});
const i = Math.floor(Math.random() * els.length);
await els[i].click();
await navP;
console.log(await page.url());
})()
.catch(err => console.error(err))
.finally(() => browser?.close());
我不能不提随机数和非确定性不是引入测试的好东西,如果这是你的用例的话。
评论
0赞
Julian Singh
9/7/2023
哇,伙计,你真棒......非常感谢,伙计
评论
Math.random()
Math.random()
const elements = await page.$$(".tool-des")
await page.waitForSelector('.tool_des')
const elements = await page.$$(".tool-des")
const randomNumber = Math.floor(Math.random() * elements.length - 1);
await page.$(
).click()
- 1