2017-09-26 88 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()是不必要的,如果您只需要单击左键单击。