我感謝所有參與并將幫助新手的人。
任務:訪問 div = client-state,然后 div = Here-Goes-Some-Div-ID 并從 data-state 回傳 json。
<div class="client-state">
<div id="Here-Goes-Some-Div-ID" data-state='{"items":[{"action":"LAYOUT"}]'>
</div>
我設法像這樣參考 div = client state -
import cheerio from 'cheerio';
const id = ["98772"]
async function GetDataFunction () {
try {
for (let i = 0; i < id.length; i ) {
let HTMLresponse = await ProductSearchFunction(id[i]);
const $ = cheerio.load(HTMLresponse);
$('.client-state').each(function()
{
const ClientState = $(this).html()
console.log(ClientState)
})
}} catch (err) {
throw err
}
};GetDataFunction()
不幸的是,我沒有找到有關如何進一步訪問“Here-Goes-Some-Div-ID”div 并獲取 data-state= 的資訊,我將不勝感激,提前謝謝您!
uj5u.com熱心網友回復:
你可以用這樣的東西:
await page.$eval('.client-state #Here-Goes-Some-Div-ID', el => el.getAttribute('data-state'))
這是什么?
- 我們使用該
page.$eval方法來評估特定的 DOM 元素 - 第一個引數是所需元素的 CSS 選擇器,您可以在已識別的類 ( ) 和 HTML id ( ) 之間使用后代組合符 - 單個空格,id-s在 id 名稱前面使用
.client-state#Here-Goes-Some-Div-ID# - 函式的第二個引數就是所謂的
pageFunction在哪里可以做到這一點:在屬性上el => el.getAttribute('data-state')使用。Element.getAttribute()data-state
您可以將其定義為變數,然后使用JSON.parse()或任何您想要對結果執行的操作來決議其內容。
注意:在您當前的示例'{"items":[{"action":"LAYOUT"}]'中將無法決議,因為包裝器物件未使用}!
完整示例:
const puppeteer = require('puppeteer')
async function main() {
const browser = await puppeteer.launch({
headless: false
})
const page = await browser.newPage()
await page.goto(url)
const dataState = await page.$eval('.client-state #Here-Goes-Some-Div-ID', el => el.getAttribute('data-state'))
console.log(dataState)
console.log(JSON.parse(dataState))
await browser.close()
}
main()
uj5u.com熱心網友回復:
它是 JSON,所以你必須決議它。
let state = $('[data-state']).attr('data-state')
let dataState = JSON.parse(state)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/525824.html
