Puppeteer 19.7.1 添加p(pseudo) 挑选人,因此,text/
作了解释,支持:-p-text
,其中选取代号。 例如:
const el = await page.waitForSelector("::-p-text(Button text)");
Pseudoselectors can work in conjunction with CSS selectors, like
const el = await page.$(".elements button::-p-text(Button text)");
在Popetepper >=18.0.0中,选修人拥有>text/
。 选择要素案文的序号:
const el = await page.waitForSelector("text/Button text");
具体来说,与18年前相比,XPath最为相关。 Puppeteer:
由于欧佩斯的使用案例似乎与目标载体(<条码>)“Button”文本(、<button>Button text</button>
text(>)似乎与正确方法不同,而不是<条码>contains()。
虽然,但Thomas为contains
提供了良好的论据。 如果有子,则使用<代码>text(>>>,避免产生错误的负面效应,则当纽特(<button>Button text and more uff</button>
, 似乎也是一种假想。 拥有这两种工具是有益的,以便你能够逐案选择更适当的工具。
const xp = //*[@class="elements"]//button[text()="Button text"] ;
const [el] = await page.$x(xp);
await el?.click();
请注意,其他许多答复都忽略了<代码>.elements other category要求。
另一个XPath功能是[normalize-space()=“Button text”
。 那些“从地体中引导和跟踪白色空间,用单一空间取代白空间的序列”,对某些情况可能有用。
此外,它经常使用waitForXPath
。 如果XPath没有在规定时限内找到,则等待,然后返回:
const xp = //*[@class="elements"]//button[text()="Button text"] ;
const el = await page.waitForXPath(xp);
await el.click();
在各种环境中运作的另一种灵活做法是使用浏览器S-.find(
或.filter(>
,在案文中列出了你想要的内容:
// untrusted click (ignores visibility, sometimes useful):
await page.$$eval(".elements *", els =>
els
.find(el => el.textContent.trim().toLowerCase() === "button text")
.click()
);
// trusted click:
const el = await page.evaluateHandle(() =>
[...document.querySelectorAll(".elements *")]
.find(el => el.textContent.trim().toLowerCase() === "button text")
);
await el.click();
或
// untrusted clicks
const els = await page.$$eval(".elements *", els =>
els
.filter(el => el.textContent.trim().toLowerCase() === "button text")
.forEach(el => el.click())
);
// trusted clicks (not ideal)
const els = await page.evaluateHandle(`
[...document.querySelectorAll(".elements *")]
.filter(el => el.textContent.trim().toLowerCase() === "button text")
`);
const length = await els.evaluate(els => els.length);
for (let i = 0; i < length; i++) {
const el = await els.evaluateHandle((els, i) => els[i], i);
await el.click();
}
如果您需要等待这一案文,请您使用<>互换功能:
const el = await page.waitForFunction(`
[...document.querySelectorAll(".elements *")]
.find(el => el.textContent.trim().toLowerCase() === "button text")
`);
await el.click();
如果你重新操纵一页,而那页的 j(或如果你 进口,则你可以使用<代码>:contains<>>:ttains sizzle pseumedlector syntax:
const el = await page.evaluateHandle(`
$( .elements :contains("Button text") ).first()
`);