2017-12-29 19 views
0

Ich möchte eine Seite auf Microsoft Virtual Academy mit PhantomJs analysieren. Zum Beispiel this one. Ich kann es laden (siehe result), aber im heruntergeladenen Quellcode sehe ich nicht die Beschreibung des Kurses oder seine Dauer.Download-Seite mit Knockout-Bindungen via PhantomJs

Um eine Seite herunterzuladen habe ich den nächsten Ansatz verwendet: https://gist.github.com/DotNetNerd/5635371.

public string Grab(string url) 
{ 
    var process = new System.Diagnostics.Process(); 
    var startInfo = new System.Diagnostics.ProcessStartInfo 
    { 
     WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden, 
     UseShellExecute = false, 
     RedirectStandardOutput = true, 
     FileName = Config.PhantomJSPath, 
     Arguments = string.Format("\"{0}\\{1}\" {2}", Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName, "index.js", url) 
    }; 

    process.StartInfo = startInfo; 
    process.Start(); 
    string output = process.StandardOutput.ReadToEnd(); 
    process.WaitForExit(); 

    return output; 
} 

und IndexJs

var page = require('webpage').create(), 
system = require('system'); 

page.onLoadFinished = function() { 
    console.log(page.content); 
    phantom.exit(); 
}; 
page.open(system.args[1]); 

Soll ich PhantomJS konfigurieren Effekt oder PhantomJS warten dauern wird, bis die Bindung einfach nicht unterstützt?

+0

versuchte nie PhantomJS direkt verwenden, aber versuchen Selen ist PhantomJSDriver verwenden. Der Quellcode, den Sie herunterladen, zeigt nicht, was Sie erwarten, da die Website der virtuellen Akademie die Website über JavaScript erstellt. Mit Selenium können Sie die meisten Details auf der Website mit ihren Methoden erhalten. – SILENT

+0

Ich habe PhantomJs verwendet, um die Seite herunterzuladen, wo der Inhalt mit JS gefüllt wurde und es hat gut funktioniert. Aber ich habe es nicht mit Knockout versucht. Haben Sie eine erfolgreiche Erfahrung mit dem Herunterladen solcher Seiten mit Selenium's PhantomJsDriver? – Artiom

+0

'Im heruntergeladenen Quellcode sehe ich keine Beschreibung des Kurses oder seiner Dauer. 'Es wird wahrscheinlich von AJAX heruntergeladen. – mjwills

Antwort

0

Schließlich entschied ich mich, nach dem Laden der Seite 5 Sekunden zu warten. Es garantiert nicht, dass alles zu dieser Zeit geladen wird, aber für mich gearbeitet hat.

Index.js wurde aktualisiert:

var page = require('webpage').create(), 
system = require('system'); 

page.onLoadFinished = function() { 
    setTimeout(function() { 
     console.log(page.content); 
     phantom.exit(); 
}, 5000); 

}; 
page.open(system.args[1]);