Javascript “如何修复”;节点不可见或不是HtmleElement“;木偶演员犯的错误?

Javascript “如何修复”;节点不可见或不是HtmleElement“;木偶演员犯的错误?,javascript,node.js,instagram,puppeteer,chromium,Javascript,Node.js,Instagram,Puppeteer,Chromium,我正在创建一个机器人,每天在Instagram上发布一些东西,我想使用Facebook上的creator studio。下面的脚本运行良好: const puppeteer = require('puppeteer'); (async () => { var username = require('./config') var password = require('./config') const browser = await puppeteer.launch();

我正在创建一个机器人,每天在Instagram上发布一些东西,我想使用Facebook上的creator studio。下面的脚本运行良好:

const puppeteer = require('puppeteer');

(async () => {
  var username  = require('./config')
  var password  = require('./config')
  const browser = await puppeteer.launch();
  const ig = await browser.newPage();
  await ig.setViewport({
    width: 1920,
    height: 1080
  })
  await ig.goto('https://business.facebook.com/creatorstudio/');
  await ig.click('.rwb8dzxj');
  await ig.waitForSelector('#email');
  await ig.type('#email', username.username);
  await ig.type('#pass', username.password);
  await ig.click('#loginbutton');
  await ig.waitForSelector('#media_manager_chrome_bar_instagram_icon');
  await ig.click('#media_manager_chrome_bar_instagram_icon');
  await ig.waitForSelector('[role=presentation]');
  await ig.click('[role=presentation]');
  await ig.screenshot({path: 'example.png'});
  await browser.close();
})().catch(err => {
  console.log(err.message);
})
但当我继续补充说:

await ig.waitForSelector('[role=menuitem]');
await ig.click('[role=menuitem]'); 
我得到这个错误:

“节点不可见或不是HTMLElement”


ElementHandle
上调用的
单击
悬停
方法引起的错误可以通过确保元素与方法分开“在视图中”来减轻(尽管声明方法“如果需要,将其滚动到视图中”,但有时似乎元素不可见)

假设元素确实连接到DOM—您可以通过属性检查,尝试使用类似的方法(示例为TypeScript)—应确保元素位于以下位置的中心:

const safeHover=async(
元素:E
) => {
等待要素评估((e)=>
e、 scrollIntoView({块:“中心”,内联:“中心”})
);
等待元素。单击();
};
请注意,该示例使用的是
elementHandle
的方法,而不是
Page
。由于在单击之前调用,请使用返回的
elementHandle

//...
const pres = await ig.waitForSelector('[role=presentation]'); 
pres && await safeHover(pres);
//...
此外,这些Q&A可能被证明是有用的:


  • 您确定[role=menuitem]存在于域的主体中,因此逻辑上是:/