一、知識點
-
page.$eval(selector, pageFunction[, ...args])
-
page.$$eval(selector, pageFunction[, ...args])
- innerHTML
二、場景
1.當我們需要獲取元素內的值,與實際值做對比的時候,驗證頁面正確性;
2.當我們獲取某個元素內的文本值,需要拿這個值圖填補另一個輸入框的時候;
三、獲取單個文本內容實例
<a href="#" onclick="register();return false">注冊</a>
看一下這段html 代碼,我現在想得到【注冊】,怎么辦呢?我們可以參考puppeteer 給我的api 依葫蘆畫瓢 ,使用el => el.innerHTML 獲取內部html 值
const puppeteer = require('puppeteer'); (async () => { const brower = await puppeteer.launch({ executablePath:'D:\\wangxiao\\chrome-win\\chrome-win\\chrome.exe', headless:false }); const page = await brower.newPage(); await page.goto('https://www.cnblogs.com/'); let res = await page.$eval('#span_userinfo a:nth-child(2)',el => el.innerHTML); console.log(res); //await brower.close(); })().catch(error =>{console.log('error')});
四、獲取多個元素文本內容
使用page.$$eval(selector, pageFunction[, ...args]) 獲取返回是數組,我現在想獲取每個標題,發現他的class的父級別是一樣的,所有元素可以寫成‘.post_nav_block li a’
const puppeteer = require('puppeteer'); (async () => { const brower = await puppeteer.launch({ executablePath:'D:\\wangxiao\\chrome-win\\chrome-win\\chrome.exe', headless:false }); const page = await brower.newPage(); await page.goto('https://www.cnblogs.com/'); let res = await page.$$eval('.post_nav_block li a',el => el.map(el => el.innerHTML)); console.log(res); await brower.close(); })().catch(error =>{console.log('error')});