2017-09-26 86 views
2

是否有人知道如何獲取元素的innerHTML或文本。或者更好;如何點擊具有特定innerHTML的元素。這是如何使用普通的javascript:Puppeteer:獲取內部HTML

var found = false 
$(selector).each(function() { 
       if (found) return; 
       else if ($(this).text().replace(/[^0-9]/g, '') === '5' { 
        $(this).trigger('click'); 
        found = true 
       } 

在此先感謝您的幫助!

回答

2

這是我得到的innerHTML:

page.$eval(selector, (element) => { 
    return element.innerHTML 
}) 
-3
<div id="innerHTML">Hello</div> 


var myInnerHtml = document.getElementById("innerHTML").innerHTML; 
console.log(myInnerHtml); 
0

您可以利用page.$$(selector)讓你的所有目標elments,然後使用page.evaluate()獲取內容(innerHTML),然後應用你的標準。它應該是這個樣子:

const targetEls = await page.$$('yourFancySelector'); 
for(let target of targetEls){ 
    const iHtml = await page.evaluate(el => el.innerHTML, target); 
    if (iHtml.replace(/[^0-9]/g, '') === '5') { 
    await target.click(); 
    break; 
    } 
} 
0

這應該與操縱木偶的人:)

const page = await browser.newPage(); 
const title = await page.evaluate(el => el.innerHTML, await page.$('h1')); 
0

關於你的問題,這部分工作...

「甚至更好;如何點擊具有特定innerHTML的元素。「

有一些particulars周圍的innerHTML,innerText屬性,和那的textContent可能會給你的悲傷。您可以使用足夠寬鬆的XPath查詢與Puppeteer v1.1.1解決此問題。

事情是這樣的:

const el = await page.$x('//*[text()[contains(., "search-text-here")]]'); 
await el[0].click({  
       button: 'left', 
       clickCount: 1, 
       delay: 50 
      }); 

請記住,你會得到ElementHandles數組從該查詢回來。所以......如果你的文本不是唯一的,你正在尋找的特定項目可能不在[0]。

Options傳遞給.click()是不必要的,如果您只需要單擊左鍵單擊。