javascript - 单击按钮时,Puppeteer 未按预期工作
问题描述
我的问题是我需要将评论选择器设置为“所有评论”whit puppeteer,但是在 puppeteer 点击正确的按钮“所有评论”后评论没有呈现,评论部分就消失了,我会提供代码和浏览器的运行视频。
const $ = require('cheerio');
const puppeteer = require('puppeteer');
const url = 'https://www.facebook.com/pg/SamsungGlobal/posts/';
const main = async () => {
const browser = await puppeteer.launch({
headless: false,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.setViewport({
width: 1920,
height: 1080
});
await page.goto(url, {
waitUntil: 'networkidle2',
timeout: 0
});
page.mouse.click(50, 540, {});
for (var a = 0; a < 18; a++) {
setTimeout(() => {}, 16);
await page.keyboard.press('ArrowDown');
}
let bodyHTML = await page.evaluate(() => document.body.innerHTML);
var id = "#" + $("._427x ._4-u2.mbm._4mrt", bodyHTML).attr('id'); // selects id of first post
try {
var exp = await page.$(`${id} a._21q1`); // clicks on "most relevant" from the first post
await exp.evaluate(exp => exp.click());
await page.click('div[data-ordering="RANKED_UNFILTERED"]'); // selects "all the comments"
var exp = await page.$(`${id} a._42ft`); // should click on "more comments" but it doesn't load
await exp.evaluate(exp => exp.click());
await page.waitForSelector(`${id} a._5v47.fss`); // wait for the "others" in facebook comments
var exp = await page.$$(`${id} a._5v47.fss`);
await exp.evaluate(exp => exp.click());
await page.screenshot({
path: "./srn4.png"
});
// var post = await page.$eval(id + " .userContentWrapper", el => el.innerHTML);
// console.log("that's the post " + post);
} catch (e) {
console.log(e);
}
setTimeout(async function() {
await browser.close(); //close after some time
}, 1500);
};
main();
这是完整执行过程的视频:https ://youtu.be/jXpSOBfVskg 这是它点击菜单那一刻的慢动作:https ://youtu.be/1OgfFNokxsA
解决方案
您可以尝试使用选择器的变体:
'use strict';
const puppeteer = require('puppeteer');
(async function main() {
try {
const browser = await puppeteer.launch({ headless: false });
const [page] = await browser.pages();
await page.goto('https://www.facebook.com/pg/SamsungGlobal/posts/');
await page.waitForSelector('[data-ordering="RANKED_THREADED"]');
await page.click('[data-ordering="RANKED_THREADED"]');
await page.waitForSelector('[data-ordering="RANKED_UNFILTERED"]');
await page.click('[data-ordering="RANKED_UNFILTERED"]');
} catch (err) {
console.error(err);
}
})();
推荐阅读
- javascript - 使用 JMeter Web 驱动程序采样器留在浏览器页面上的 JavaScript 代码
- python - 存储 ssh 连接
- java - 如果服务器没有响应文件下载,则返回错误消息
- android - 如何在图像上绘制文本并在网格中显示?
- angular - 对角度 5 中 ng2-chart 的每个部分执行单独的单击事件
- node.js - 如何在 node.js 中获取与 TypeScript 文件行数相关的错误信息?
- access-token - IdentityServer4 访问令牌生命周期
- javascript - Owl Carousal auto refresh even when single image is there singleItem mode
- hadoop - HBase 行键范围分配
- python - Python - 连接特定目录中的 CSV 文件