是否可以在innerhtml中忽略

时间:2018-02-22 19:34:06

标签: puppeteer

我有一行代码

await page.$$eval("a", as => as.find(a => a.innerText.includes("shop")).click());

所以,它会点击商店,一切都还好,但如果商店写得像这样 - “S&#65279h&#65279op”。所以,木偶操作者无法找到它。可以忽略&#65279吗?所以,那个木偶操作者只会看到“商店”。

1 个答案:

答案 0 :(得分:0)

您可以使用DOMParser解码innerText。从this answer

复制的示例
window.getDecodedHTML = function getDecodedHTML(encodedStr) {
  const parser = new DOMParser();
  const dom = parser.parseFromString(
    `<!doctype html><body>${encodedStr}`,
    "text/html"
  );
  return dom.body.textContent;
}

将上述代码段保存到script.js等文件中并将其注入以便于使用。

await page.evaluate(fs.readFileSync('script.js', 'utf8'));

现在您可以使用它来解码innerText。

await page.$$eval("a", as => as.find(a => getDecodedHTML(a.innerText).includes("shop")).click());

解决方案可能不是最佳选择。但它应该成功。

对于您而言,another snippet不需要DOMparser。

window.getDecodedHTML = function(str) {
  return str.replace(/&#(\d+);/g, function(match, dec) {
    return String.fromCharCode(dec);
  });
};