因为我没有找到 puppeteer native 函数来设置基于文本而不是值选择的下拉选项,所以我尝试自己编写它
async function setSelectName(page, selector, valText) {
return await page.evaluate((data) => {
console.log(JSON.stringify(data));
let options = document.querySelectorAll(data.selector);
console.log(JSON.stringify(options));
let optionCount = options.length;
for (let i = 0; i < optionCount; ++i) {
if (options[i].text === data.valText) {
console.log('match');
document.querySelector(data.selector).value = options[i].value;
}
}
}, {selector, valText})
}
不幸的是,它不起作用,当我尝试在控制台中显示选定的选项时,它会显示我:
{"0":{"0":{},"1":{},"2":{},"3":{}}}
了解会发生什么以及如何做吗?
最佳答案
async function selectOptionByText(page, seletctId, textWanted) {
const optionWaned = (await page.$x(`//*[@id = "${seletctId}"]/option[text() = "${textWanted}"]`))[0];
const opionValue = await (await optionWaned .getProperty('value')).jsonValue();
await page.select(`#${seletctId}`', opionValue );
}
关于node.js - puppeteer 师 : set a dropdown option as selected based on text in an external function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49116670/