Javascript Puppeter-无法使用page.evaluate(()=>;document.querySelectorAll()提取某些网站上的元素

Javascript Puppeter-无法使用page.evaluate(()=>;document.querySelectorAll()提取某些网站上的元素,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我正在尝试选择和console.log()终端中网站所有链接的节点列表。但是,我无法访问某些网站-google.com、facebook.com、instagram.com 我知道元素就在那里,因为我当然可以在实际的Chromium控制台中记录它们,使用document.querySelectorAll('a')单独加载。但当我试图在节点终端中提取和记录链接时,使用 const links = await page.evaluate(() => document.querySelector

我正在尝试选择和
console.log()
终端中网站所有链接的节点列表。但是,我无法访问某些网站-google.comfacebook.cominstagram.com

我知道元素就在那里,因为我当然可以在实际的Chromium控制台中记录它们,使用
document.querySelectorAll('a')
单独加载。但当我试图在节点终端中提取和记录链接时,使用

const links = await page.evaluate(() => document.querySelectorAll('a'))
console.log(links)
我得到未定义的

然而,大多数网站都不是这样,例如,我的代码在yahoo.comlinkedin.com。这是:

const URL = 'https://instagram.com/';
const scrape = async () => {
    const browser = await puppeteer.launch({
        headless: false
    });
    const page = await browser.newPage();
    await page.setViewport({
        width: 1240,
        height: 680
    });
    await page.goto(URL, { waitUntil: 'domcontentloaded' });
    await page.waitFor(6000);
    const links = await page.evaluate(() => document.querySelectorAll('a'));
    console.log(links);
    await page.screenshot({
        path: 'ig.png'
    });
    await browser.close();
};
我尝试按照中的建议添加
bypassBotDetectionSystem()
函数,但没有成功。我不认为这是问题所在,因为正如我所说的,我可以轻松地在Chromium中导航


谢谢你的帮助

您正试图使用
page.evaluate
方法返回
DOM
元素,但这是不可能的,因为如果传递到
page.evaluate
的函数返回一个值,则
page.evaluate
将解析为
未定义的

如果要获取
元素句柄的数组,可以使用该方法

例如:

const links = await page.$$('a'); // returns <Promise<Array<ElementHandle>>>
const hrefs = await page.$$eval('a', links => links.map(link => link.href));
console.log(hrefs);

您正试图使用
page.evaluate
方法返回
DOM
元素,但这是不可能的,因为如果传递到
page.evaluate
的函数返回一个值,则
page.evaluate
将解析为
未定义的

如果要获取
元素句柄的数组,可以使用该方法

例如:

const links = await page.$$('a'); // returns <Promise<Array<ElementHandle>>>
const hrefs = await page.$$eval('a', links => links.map(link => link.href));
console.log(hrefs);
const hrefs=wait page.$$eval('a',anchors=>[].map.call(anchors,a=>a.href));
const hrefs=wait page.$$eval('a',anchors=>[].map.call(anchors,a=>a.href));

感谢您提供此代码片段,它可能会提供一些有限的即时帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的答案中添加一些解释,包括您所做的假设。感谢您提供此代码片段,它可能会提供一些有限的、即时的帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。