Javascript “如何修复”;节点不可见或不是HtmleElement“;木偶演员犯的错误?
我正在创建一个机器人,每天在Instagram上发布一些东西,我想使用Facebook上的creator studio。下面的脚本运行良好: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();
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]存在于域的主体中,因此逻辑上是:/