2017-03-23 4 views
1

NodeJS-Neuling hier zurück. Ich versuche, HTML mit NodeJS und PhamtomJS (phantomjs-node) zu analysieren. Wenn ich die JQuery $("[class*='question-summary']") von der Browser-Konsole aus ausführen, wird ein Array zurückgegeben. Allerdings konnte ich nicht das gleiche auf Nodejs machen. Ich nehme an, dass stackoverflow JQuery hat, also brauche ich includeJs nicht, um jquery zu laden. Eigentlich, wenn ich renneNodeJs + PhantomJs geben JQuery-Ergebnis von page.evaluate method

Hier ist das nodejs Beispiel, das ich gerade laufe;

var phantom = require('phantom'); 

async function getHtml() { 
    const instance = await phantom.create([ 
     "--load-images=false"  
    ]); 

    const page = await instance.createPage(); 
    await page.on("onResourceRequested", function(requestData) { 
     console.info('Requesting', requestData.url) 
    }); 

    const status = await page.open('http://stackoverflow.com'); 
    console.log("STATUS: " + status); 

    const content = await page.property('content'); 
    console.log(content); 

    var result = await page.evaluate(function(content) { 
        return $("[class*='question-summary']"); 
       }); 

    console.log("Result : " + result); 
    await instance.exit(); 
}; 

getHtml(); 

Ich laufe mit dem Befehl >node --harmony-async-await phantomTest.js. Und der Prozess bleibt nach dem Drucken von Inhalten auf der Konsole hängen.

+0

Ich nehme an, node.js ist eine harte Anforderung? Es ist nur so, dass dies in PhantomJS so viel einfacher wäre. – Vaviloff

+0

Es ist keine schwierige Anforderung, aber ich werde versuchen, einen Cron-Job für das Parsen und Fortbestehen einiger Daten zu implementieren. und ich möchte nodejs lernen. – quartaela

+0

Ich wollte nur bemerken, dass Sie Skripte speziell für PhantomJS schreiben können, führen Sie sie von Cron und sie werden VIEL einfacher, ohne async/erwarten/verspricht Sachen. – Vaviloff

Antwort

2

Beantworten Sie meine eigene Frage hier. Erstellen Sie ein Array innerhalb der Funktion evaluieren und schieben Sie die Elemente im Inneren. Ich denke, die einzige Einschränkung ist phantom-node unterstützt nur die Rückgabe von Objekten mit Primitiven.

var result = await page.evaluate(function() { 
    var questionSummaries = []; 
    $("[class*='question-summary']").each(function() { 
     questionSummaries.push(this.innerHTML); 
    }); 
    return questionSummaries; 
}); 
Verwandte Themen