[英]How to get text from shadow root element?
為此,您可以在 puppeteer 中使用query-selector-shadow-dom npm 包。
const puppeteer = require('puppeteer');
const { QueryHandler } = require('query-selector-shadow-dom/plugins/puppeteer');
(async () => {
try {
await puppeteer.__experimental_registerCustomQueryHandler('shadow', QueryHandler);
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto('http://some-site.com/');
await page.waitForSelector('shadow/div'); // if it'd have a class you could replace "div" with the ".class-name"
const shadowDiv = await page.$('shadow/div');
const text = await page.evaluate(el => el.innerText, shadowDiv);
await browser.close();
} catch (e) {
console.error(e);
}
})()
您提到您需要在 chrome 設置中應用 shadow DOM,我建議使用所需設置創建一個 chrome 配置文件( Custom Profile 1
),然后將此配置文件與 puppeteer 一起使用:
例如:
const browser = await puppeteer.launch({
headless: false,
args: [
'--user-data-dir=C:\\Users\\user.name\\AppData\\Local\\Chromium\\User Data',
'--profile-directory=Custom Profile 1'
]
})
上面的示例適用於 Windows,請在此處查看更多平台和更多信息。
由於此 PR https://github.com/puppeteer/puppeteer/pull/6509 ,您可以使用內置的pierce
查詢處理程序。 在文檔附帶的HTML示例中:
<div>
<custom-element>
<div></div>
</custom-element>
</div>
此調用使您可以訪問影子根目錄中的 div:
await page.$$('pierce/div')
不再需要 @theDavidBarton 提出的query-selector-shadow-dom
npm package 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.