我有一行代码
await page.$$eval("a", as => as.find(a => a.innerText.includes("shop")).click());
所以,它会点击商店,一切都还好,但如果商店写得像这样 - “S&#65279h&#65279op”。所以,木偶操作者无法找到它。可以忽略&#65279吗?所以,那个木偶操作者只会看到“商店”。
答案 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);
});
};