Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击按钮时木偶演员未按预期工作_Javascript_Node.js_Web Scraping_Web Crawler_Puppeteer - Fatal编程技术网

Javascript 单击按钮时木偶演员未按预期工作

Javascript 单击按钮时木偶演员未按预期工作,javascript,node.js,web-scraping,web-crawler,puppeteer,Javascript,Node.js,Web Scraping,Web Crawler,Puppeteer,我的问题是,我需要将注释选择器设置为“所有注释”,但在木偶演员单击正确的按钮“所有注释”后,注释不会呈现,注释部分将消失,我将提供浏览器运行时的代码和视频 const $ = require('cheerio'); const puppeteer = require('puppeteer'); const url = 'https://www.facebook.com/pg/SamsungGlobal/posts/'; const main = async () => {

我的问题是,我需要将注释选择器设置为“所有注释”,但在木偶演员单击正确的按钮“所有注释”后,注释不会呈现,注释部分将消失,我将提供浏览器运行时的代码和视频

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(); 
const$=require('cheerio');
const puppeter=require('puppeter');
常量url=https://www.facebook.com/pg/SamsungGlobal/posts/';
常量main=async()=>{
const browser=wait puppeter.launch({
无头:错,
参数:['--no sandbox','--disable setuid sandbox']
});
const page=wait browser.newPage();
等待page.setViewport({
宽度:1920,
身高:1080
});
等待页面。转到(url{
waitUntil:'networkidle2',
超时:0
});
鼠标点击(50540,{});
对于(var a=0;a<18;a++){
setTimeout(()=>{},16);
等待页面。键盘。按下('箭头向下');
}
让bodyHTML=wait page.evaluate(()=>document.body.innerHTML);
var id=“#”+$(“.u 427x._4-u2.mbm._4mrt”,bodyHTML.attr('id');//选择第一篇文章的id
试一试{
var exp=await page.$(`id}a.\u 21q1`);//单击第一篇文章中的“最相关”
等待exp.evaluate(exp=>exp.click());
等待页面。单击('div[data ordering=“RANKED_UNFILTERED”]”);//选择“所有评论”
var exp=await page.$(`${id}a._42ft`);//应单击“更多注释”,但不会加载
等待exp.evaluate(exp=>exp.click());
wait page.waitForSelector(`${id}a.\u 5v47.fss`);//等待facebook评论中的“其他人”
var exp=wait page.$$(`${id}a.\u 5v47.fss`);
等待exp.evaluate(exp=>exp.click());
等待页面。屏幕截图({
路径:“./srn4.png”
});
//var post=wait page.$eval(id+“.userContentWrapper”,el=>el.innerHTML);
//log(“那是post”+post);
}捕获(e){
控制台日志(e);
}
setTimeout(异步函数(){
等待browser.close();//一段时间后关闭
}, 1500);
};
main();
这是完整执行过程的视频: 这是它点击菜单时的慢动作:

这不一定行得通。你想点击什么?您需要使用CSS选择器来查找要单击的元素


此外,动态元素可能不会立即出现在页面中。您应该根据需要使用。

您可以尝试使用选择器的变体:

“严格使用”;
const puppeter=require('puppeter');
(异步函数main(){
试一试{
const browser=wait puppeter.launch({headless:false});
const[page]=wait browser.pages();
等待页面。转到('https://www.facebook.com/pg/SamsungGlobal/posts/');
等待page.waitForSelector(“[data ordering=“RANKED_THREADED”]”);
等待页面。单击(“[data ordering=“RANKED_THREADED”]”);
等待page.waitForSelector(“[data ordering=“RANKED_Unfilted”]”);
等待页面。单击(“[data ordering=“RANKED_Unfilted”]”);
}捕捉(错误){
控制台错误(err);
}
})();

我确实在等待dinamic元素,正如您从yt中了解到的,注释部分消失了。您的答案中的这一行是存在的,因为浏览器关注deafult的登录字段,单击该点允许使用向下箭头,因此,允许傀儡使用键盘滚动它通过在点击之间添加超时来解决问题
page.mouse.click(50, 540, {});