使用node.js访问DOM

ame*_*eni 5 javascript dom node.js jsdom cheerio

我想访问html文件并使用node.js获取id的元素,这是我的html文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Diagram </title>

<script>

    function generatePNG (oViewer) {
// some other code
            reader.onloadend = function() {
                base64data = reader.result;
                var image = document.createElement('img');
                image.setAttribute("id", "GraphImage");
                image.src = base64data;
                document.body.appendChild(image);
            }

        }, "image/png", oImageOptions);
        return sResult;

        var sResult = generatePNG (oEditor.viewer);

    });
</script>


</head>

<body >
    <div id="diagramContainer"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我想document.getElementById("GraphImage").src用node.js 来搞定 .我发现我可以使用cheeriojsdom访问DOM带有node.js,所以我尝试使用以下代码cheerio:

var cheerio = require('cheerio'),
    $ = cheerio.load('file.html');
Run Code Online (Sandbox Code Playgroud)

但我没有找到允许我image.src从html文件中获取的指令,就像这条指令:document.getElementById("GraphImage").src

Ale*_*rev 3

cheerio.load()接受一个字符串作为参数。通过设置: cheerio将尝试从字符串cheerio.load('file.html')执行。显然,这不是您想要的。DOMfile.html

您应该首先从文件中获取html数据,然后将其传递到cheerio. 另外,正如 @Quentin 提到的,cheerio 是 jQuery 的简化实现,因此您应该使用 jQuery 选择器来获取 ceratin 元素。对于您的特定情况,它将是:$("#GraphImage")。您的代码应如下所示:

 var cheerio = require('cheerio'),
     $ = cheerio.load('file.html'),
     fs = require('fs');
 fs.readFile('./index.html', function (err, html) {
    if (err) {
        throw err; 
    } else {
        $ = cheerio.load(html.toString());
        console.log($('#GraphImage').attr('src'));   
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

另外,在您提供的 html 文件中,您将借助 javascript 将一些对象附加到 DOM。如果您想在服务器上访问它们,则应在服务器上解释 javascript。您可以使用类似的方法phantomjs来实现它,但事情会变得更加复杂。