javascript - 如何使用 puppeteer 从选定的选项(不是值)中获取文本

标签 javascript node.js puppeteer

我有这样一个选择选项:

<label>Choose One:</label>
<select id="choose1">
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
    <option value="val3">Value 3</option>
</select>

然后,在我的项目中,我可以选择必要的选项,在下面的例子中,我选择了 val2 值。

await page.select('#choose1', 'val2');  

因此,我尝试获取 val2 的文本,但在所有尝试中返回的都是错误的。

我已经试过了,它返回了第一个选项的 textContent:

const element = await page.$('#choose1 option');
const selected = await (await element.getProperty('textContent')).jsonValue();

如果我使用 await page.$('#choose1 option:selected'),我会收到一个不是有效选择器的错误。

谁能帮帮我?

最佳答案

您可以在选项上使用 .find 来选择与特定值匹配的选项,然后提取其文本内容:

const puppeteer = require("puppeteer"); // ^19.0.0

const html = `
<select id="choose1">
  <option value="val1">Value 1</option>
  <option value="val2">Value 2</option>
  <option value="val3">Value 3</option>
</select>
`;

let browser;
(async () => {
  browser = await puppeteer.launch();
  const [page] = await browser.pages();
  await page.setContent(html);
  const targetVal = "val2";

  // not really necessary
  // await page.select("#choose1", targetVal); 

  const selectedText = await page.$$eval(
    "#choose1 option",
    (els, targetVal) =>
      els.find(el => el.value === targetVal).textContent,
    targetVal
  );
  console.log(selectedText); // => Value 2
})()
  .catch(err => console.error(err))
  .finally(() => browser?.close());

关于javascript - 如何使用 puppeteer 从选定的选项(不是值)中获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74463792/

相关文章:

javascript - 无法使用 puppeteer 从图像列表中获取 url

javascript - HTML5/CSS : How do you create pixelated text (upscale with sharp edges)

javascript - AngularJS:动态绑定(bind) Click in 指令被触发多次

javascript - stub 不返回 proxyquire 中的解析数据变得未定义

macos - mac有什么好的node.js IDE吗?

node.js - 即使调用计数为 1,Sinon spy 断言也会失败

node.js - Puppeteer 的 BrowserFetcher 发生了什么?

javascript - 如何在reactjs前端正确地将pdf字符串转换为pdf? (带有 puppeteer 的空白pdf)

javascript - Quickblox:在 Javascript 中更改其他用户的密码

javascript - 使下拉框适合在没有相对位置的包装内