Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 木偶演员:根据外部功能中的文本,将下拉选项设置为选中_Node.js_Automated Tests_Google Chrome Devtools_Puppeteer - Fatal编程技术网

Node.js 木偶演员:根据外部功能中的文本,将下拉选项设置为选中

Node.js 木偶演员:根据外部功能中的文本,将下拉选项设置为选中,node.js,automated-tests,google-chrome-devtools,puppeteer,Node.js,Automated Tests,Google Chrome Devtools,Puppeteer,因为我找不到Puppeter的本机函数来设置一个基于文本而非值的下拉选项,所以我试着自己编写它 async function setSelectName(page, selector, valText) { return await page.evaluate((data) => { console.log(JSON.stringify(data)); let options = document.querySelectorAll(data.select

因为我找不到Puppeter的本机函数来设置一个基于文本而非值的下拉选项,所以我试着自己编写它

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:{}


你知道会发生什么以及如何做吗?

这不是最直观的工作流程。下面是一个工作故障示例,它通过抓取页面来获取select节点的name属性

server.js:

cars.html:

键是const name=wait page.$evalselector,node=>node.name,它在页面上运行document.querySelectorselector,然后在第二个参数中将节点传递给回调函数。另见:


我想这足以让你走上正轨。祝你好运

如果您实际上没有选择文本,请尝试以下操作

let options = Array.from(document.querySelectorAll(data.selector)).map(option => option.innerText)

你能澄清一下你想选择什么吗?@endamoloy抱歉,我已经更新了我的问题谢谢你的回答,这很有用也很有趣,但那不是我的问题谢谢你的回答我可以在选择中看到选项的内部文本,但我不能将选项设置为selectedconst optionWaned=wait page.$x/*[@name=bingo]/option[text=${text}][0];
<!DOCTYPE html>
<html>
<body>

<select name="bingo">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

</body>
</html>
let options = Array.from(document.querySelectorAll(data.selector)).map(option => option.innerText)
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 );
}