javascript - 使用 Puppeteer 获取 HTML 属性的值

标签 javascript node.js ecmascript-6 puppeteer

使用 Puppeteer,我选择了一些 HTML 元素:

await page.$$( 'span.styleNumber' );

我可以使用以下方法获取元素的文本:

console.log( await ( await styleNumber.getProperty( 'innerText' ) ).jsonValue() );

如何获取元素的 data-Color 属性的值?

这是我的脚本:

HTML

<span class="styleNumber" data-Color="Blue">SG1000</span>
<span class="styleNumber" data-Color="Green">SG2000</span>
<span class="styleNumber" data-Color="Red">SG3000</span>

puppeteer 师

const puppeteer = require( 'puppeteer' );

( async() => {
    const browser = await puppeteer.launch();

    const page = await browser.newPage();

    await page.goto( 'http://www.example.com/sample.php' );

    // Get a list of all elements.
    var styleNumbers = await page.$$( 'span.styleNumber' );

    // Print the style numbers.
    for( let styleNumber of styleNumbers ) {
        try {
            console.log( await ( await styleNumber.getProperty( 'innerText' ) ).jsonValue() );
        }
        catch( e ) {
            console.log( `Could not get the style number:`, e.message );
        }
    }

    await browser.close();
} )();

上面的代码将打印:

SG1000
SG2000
SG3000

如何获取 data-Color 属性的值?例如:

console.log( await ( await styleNumber.getAttribute( 'data-Color' ) ) ); // Blue

最佳答案

您可以使用evaluate方法获取属性值。

await page.evaluate('document.querySelector("span.styleNumber").getAttribute("data-Color")')
<小时/>

第二种方式

也可以使用

$$eval 方法。也称为变量数组的属性

const attr = await page.$$eval("span.styleNumber", el => el.map(x => x.getAttribute("data-Color")));

输出将是

["Blue", "Green", "Red"]
<小时/>

您的解决方案

const styleNumbers = await page.$$("span.styleNumber");

for( let styleNumber of styleNumbers ) {
    const attr = await page.evaluate(el => el.getAttribute("data-Color"), styleNumber);
}

关于javascript - 使用 Puppeteer 获取 HTML 属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56467696/

相关文章:

javascript - 即使不使用 ES6 箭头函数,它们是否仍然在 "this"上关闭?

javascript - ES6 中类的引用丢失

javascript - 是否有一个 Javascript 事件可以根据用户输入不断更新 DOM?

javascript - 关于我的 .getStuff 方法和 Javascript OO 编程的两个问题

javascript - 如何在免费的 jqgrid 中增加表单编辑中的文本区域宽度

javascript - 在 JavaScript ES2015 中,在扩展一个类时,我们是否需要显式地创建一个新的构造函数,还是可以直接使用父类的构造函数?

javascript - 在全局范围内声明的变量未被函数识别

node.js - 如何在 React 应用程序中禁用文件监视

node.js - 多次写入时 Node 网络数据合并

javascript - NodeJS : ASync/callback problems