按文本选择选项,不按伪造者选择值

时间:2018-08-23 17:20:12

标签: javascript node.js puppeteer

目标网址:http://www.supremenewyork.com/shop/jackets/uaxjeqvro/fm9kozqa6

目标元素:#s

问题:无法从下拉列表中选择一个值。我已经尝试了多种方法,但是在Stack Overflow上我只能找到相关的问题,[How to select an option from dropdown select,但是这些答案都没有描述如何通过元素的文本而不是选项的值来选择选项。

1 个答案:

答案 0 :(得分:2)

这应该可以正常工作,并在1.7.0版上进行了测试 https://try-puppeteer.appspot.com/

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('http://www.supremenewyork.com/shop/jackets/uaxjeqvro/fm9kozqa6');

let $elemHandler = await page.$('#s');
let properties = await $elemHandler.getProperties();
for (const property of properties.values()) {
  const element = property.asElement();
  if (element){
    let hText = await element.getProperty("text");
    let text = await hText.jsonValue();
    if(text==="Large"){
       let hValue = await element.getProperty("value");
       let value = await hValue.jsonValue();
      await page.select("#s",value); // or use 58730
      console.log(`Selected ${text} which is value ${value}.`);
    }
  }
}
await browser.close();