如何 select 表弟的内部文本使用 puppeteer
How to select inner text of cousin using puppeteer
我正在尝试根据表亲的字符串值获取 phone 数字。
我的目标是搜索“所有者”并以 phone 号码的值结束。
<div>
<h3>
<a href="#">Owner</a>
</h3>
<p>
(555) 555-5555
</p>
</div>
这是我目前所拥有的,但我不断得到 undefined
。你能解释一下我做错了什么吗?
console.log(await this.page.$("//h3[contains(a, 'Owner')]/../p").innerText);
存在一些问题:
page.$()
需要一个 CSS 选择器,而不是 XPath。
page.$x()
将 return 一个包含 ElementHandle-s. 的数组
- ElementHandle-s 与 DOM 元素没有相同的属性,我们需要使用更复杂的 API 来获取它们。
- 我无法让 puppeteer 使用
'#'
href 创建一个 a
元素,只能使用完整的 URL,但这可能是一个测试用例问题。
这对我有用:
const html = `
<!doctype html>
<html>
<head><meta charset='UTF-8'><title>Test</title></head>
<body>
<div>
<h3>
<a href="http://example.com/">Owner</a>
</h3>
<p>
(555) 555-5555
</p>
</div>
</body>
</html>`;
const puppeteer = require('puppeteer');
(async function main() {
try {
const browser = await puppeteer.launch();
const [page] = await browser.pages();
await page.goto(`data:text/html,${html}`);
const data = await (
await (
await page.$x("//h3[contains(a, 'Owner')]/../p")
)[0].getProperty('innerText')
).jsonValue();
console.log(data);
await browser.close();
} catch (err) {
console.error(err);
}
})();
我正在尝试根据表亲的字符串值获取 phone 数字。
我的目标是搜索“所有者”并以 phone 号码的值结束。
<div>
<h3>
<a href="#">Owner</a>
</h3>
<p>
(555) 555-5555
</p>
</div>
这是我目前所拥有的,但我不断得到 undefined
。你能解释一下我做错了什么吗?
console.log(await this.page.$("//h3[contains(a, 'Owner')]/../p").innerText);
存在一些问题:
page.$()
需要一个 CSS 选择器,而不是 XPath。page.$x()
将 return 一个包含 ElementHandle-s. 的数组
- ElementHandle-s 与 DOM 元素没有相同的属性,我们需要使用更复杂的 API 来获取它们。
- 我无法让 puppeteer 使用
'#'
href 创建一个a
元素,只能使用完整的 URL,但这可能是一个测试用例问题。
这对我有用:
const html = `
<!doctype html>
<html>
<head><meta charset='UTF-8'><title>Test</title></head>
<body>
<div>
<h3>
<a href="http://example.com/">Owner</a>
</h3>
<p>
(555) 555-5555
</p>
</div>
</body>
</html>`;
const puppeteer = require('puppeteer');
(async function main() {
try {
const browser = await puppeteer.launch();
const [page] = await browser.pages();
await page.goto(`data:text/html,${html}`);
const data = await (
await (
await page.$x("//h3[contains(a, 'Owner')]/../p")
)[0].getProperty('innerText')
).jsonValue();
console.log(data);
await browser.close();
} catch (err) {
console.error(err);
}
})();