Javascript 使用剧作家获取列表元素列表

Javascript 使用剧作家获取列表元素列表,javascript,node.js,web-scraping,playwright,Javascript,Node.js,Web Scraping,Playwright,我正在尝试编写一个应用程序,它将进入亚马逊,并在页面上获得一个图书列表。我用剧作家作为工具。我可以找到正确的部分,但是我找不到书的目录。在线查看示例时,似乎使用了page.$$(选择器),但当我尝试这样做时,我得到了一个空数组。找到此信息,然后重试。阅读$$,这似乎是正确的调用,因为所有列表元素都具有相同的类名。我不知道我做错了什么,有什么建议吗 这是到目前为止我的代码 const AMAZON_KINDLE_EBOOK_STORE_URL = 'https://www.amazon.com/B

我正在尝试编写一个应用程序,它将进入亚马逊,并在页面上获得一个图书列表。我用剧作家作为工具。我可以找到正确的部分,但是我找不到书的目录。在线查看示例时,似乎使用了
page.$$(选择器)
,但当我尝试这样做时,我得到了一个空数组。找到此信息,然后重试。阅读
$$
,这似乎是正确的调用,因为所有列表元素都具有相同的类名。我不知道我做错了什么,有什么建议吗

这是到目前为止我的代码

const AMAZON_KINDLE_EBOOK_STORE_URL = 'https://www.amazon.com/Best-Sellers-Kindle-Store-eBooks/zgbs/digital-text/154606011/ref=zg_bs_nav_kstore_1_kstore/';
(async () => {
    const browser = await chromium.launch();
    try {
        const amazonPage = await browser.newPage();
        await amazonPage.goto(AMAZON_KINDLE_EBOOK_STORE_URL);

        await amazonPage.waitForSelector('"Best Sellers in"');
        await amazonPage.click('"Self-Help"');
        await amazonPage.click('"Creativity"')

        const books = await amazonPage.$$('li[class="zg-item-immersion"]');
        console.log(books);
    } finally {
        await browser.close();
    }
})();
对于选择器,我也尝试了很多方法

  • li[class=“zg item immersion”]
    -这实际上可以在开发人员控制台上进行检查
  • 'zg-item-immersion'
  • #zg项目浸没

唯一的问题似乎是Plawright的速度太快了,您没有等待那些元素
li[class=“zg item immersion”]

我调试了脚本,选择器很好,因此在这一行中,它返回50个元素句柄:

const{chromium}=require(“剧作家”);
const AMAZON\u KINDLE\u电子书\u商店\u URL='10〕https://www.amazon.com/Best-Sellers-Kindle-Store-eBooks/zgbs/digital-text/154606011/ref=zg_bs_nav_kstore_1_kstore/';
(异步()=>{
const browser=wait.launch({headless:false});
试一试{
const amazonPage=wait browser.newPage();
等待amazonPage.goto(亚马逊KINDLE电子书商店URL);
等待amazonPage.waitForSelector(“‘中的畅销书’”);
等待amazonPage。单击(“自助”);
等待承诺([
amazonPage.waitForNavigation(),
amazonPage。单击(“‘创造力’”)
]);
const books=wait amazonPage.$$('li[class=“zg item immersion”]”);
控制台。日志(书籍);
}最后{
等待浏览器关闭();
}
})();
您或许可以像上面几行那样为选择器执行以下操作:

const{chromium}=require(“剧作家”);
const AMAZON\u KINDLE\u电子书\u商店\u URL='10〕https://www.amazon.com/Best-Sellers-Kindle-Store-eBooks/zgbs/digital-text/154606011/ref=zg_bs_nav_kstore_1_kstore/';
(异步()=>{
const browser=wait.launch({headless:false});
试一试{
const amazonPage=wait browser.newPage();
等待amazonPage.goto(亚马逊KINDLE电子书商店URL);
等待amazonPage.waitForSelector(“‘中的畅销书’”);
等待amazonPage。单击(“自助”);
等待amazonPage。单击(“‘创造力’”)
等待amazonPage.waitForSelector('li[class=“zg item immersion”]”);
const books=wait amazonPage.$$('li[class=“zg item immersion”]”);
控制台。日志(书籍);
}最后{
等待浏览器关闭();
}
})();

它也是这样工作的。

谢谢@pavelsaman,这对我来说是一种享受。因此,无论何时页面更改/更新,在执行任何操作之前,始终使用
waitForSelector