首页 > 解决方案 > 模板文字不适用于查询选择器

问题描述

我正在循环浏览一个下拉列表,并尝试选择单个选项。如果我尝试使用模板文字,则 querySelector 将返回 null。

这里有两个不同的查询,一个带有模板文字,一个没有。我正在使用反引号,一切都相同,但第一个查询返回 null 而第二个查询返回正确的值,即使在这种情况下 "i" = 2 也是如此。

const value = await self.page.evaluate(() => {
              return document.querySelector(`select option:nth-child(${i})`);
});

const value1 = await self.page.evaluate(() => {
              return document.querySelector(`select option:nth-child(2)`);           
});

// Structure
for (let i = 2; i < options.length; i++){

    if (options[i]....){
        const value = await self.page.evaluate((i) => {
             return document.querySelector(`select option:nth-child(${i})`);
            });

    }
}

为什么会这样?

标签: javascriptdomweb-scrapingpuppeteer

解决方案


链接:Puppeteer:在 .evaluate() 中传递变量

您必须传递另一个参数以page.evaluate确保i在范围内

const value = await self.page.evaluate((i) => {
    return document.querySelector(`select option:nth-child(${i})`);
}, i);

推荐阅读