Friday, 23 June 2017

Phantomjs C # Prozess Waitforexit


Ich möchte in der Lage, einen Screenshot einer Website zu lesen, und ich versuche, Phantomjs und ASP verwenden. Ich habe versucht, mit page. render, die den Screenshot zu einer Datei speichern würde. Es funktioniert wie eine Konsolenanwendung, aber nicht, wenn ich es von einem asp-Handler nenne. Es ist wahrscheinlich auf Dateiberechtigungen zurückzuführen, da einfache Anwendungen (wie hello. js) funktionieren. Das ist okay, meine Vorliebe wäre nicht, eine Datei zu schreiben, sondern um mit den Bytes umzugehen und ein Bild direkt vom Handler zurückzugeben. Ich bin ein bisschen verloren, wie das zu tun. Ich bemerkte eine Methode namens page. renderBase64, aber weiß nicht, wie es zu benutzen. Derzeit bin ich mit einem IHttpHandler. Es gibt eine ähnliche Frage hier, aber diese Person schließlich fiel phantomjs. Ich mag den Blick von ihm und möchte ihn weiter verwenden, wenn möglich. Running Phantomjs mit C zu Schnappschuss Schnappschuss von webpageI haben eine lustige kleine Projekt geht jetzt, dass die Einnahme eines Teils einer Web-Seite, laden Sie es in PhantomJS, übergeben eine Klumpen von Daten, um ein Bild von der Seite und Anzeige Dieses Bild in einem RDLC-Bericht. Es gibt wie ein Bagillion verschiedene Möglichkeiten, dies zu erreichen, so dass die unten ist ein Hacker Beweis für Konzept. Zuerst benötigen wir eine sehr einfache Webseite mit den folgenden Elementen: Ein Formularelement mit versteckten Eingabedaten, die verwendet werden, um Daten von der primären Anwendung auf die Stub-Seite zu verschieben. Zwei weitere Eingaben Höhe und Breite, die verwendet werden, um einfach zu zeigen, Befehlszeile Argument an Phantom übergeben. Eine Schaltfläche, die verwendet werden kann, um eine JavaScript-Funktion auszulösen, die wiederum die Seite zeichnet. Hoffentlich ist es offensichtlich, dass unsere Javascript-Methode init () in my. js einfach alles in den Container eintauchen wird. Das nächste Element, das wir brauchen, ist der Javascript-Läufer, den wir an den Phantom weiterleiten und diesen ganzen Prozess abschießen. Beachten Sie die Dateisystem Aufruf für stumpage. html Dies könnte weitergegeben werden, aber ich dachte, ein Dateisystem aufrufen könnte für jemand nützlich sein. Wir beginnen unsere C-Methode, indem wir den Weg zum Phantom einrichten (Anmerkung: Sie können Phantom zu Ihrem Weg hinzufügen, an ihm vorbeiziehen, so dass es keine magischen Konstanten gibt usw.). Als nächstes müssen wir die Befehlszeilenargumente für Phantom einrichten: Der relative Pfad zu unserer JavaScript-Läuferdatei von oben. Die Seitenhöhe. Die Seitenbreite. Fahren Sie mit dem Einrichten einer Prozessumgebung für Phantom fort, indem Sie Standard In, Out amp Fehler umleiten, der die Interaktion mit Phantom ermöglicht. Die letzten beiden Prozesseinstellungen sind die Verhinderung eines Fensters beim Prozessstart und die Deaktivierung von Shell Execution (siehe MSDN-Docs für Details zur Shell-Ausführung). Mit Phantom up und running können wir einen Verweis auf den umgeleiteten Standard-Inputstream nehmen, unsere Daten serialisieren Zu unserem Phantom-Prozess. Das Schließen des Eingangsstroms führt zu einer Auswertung der Seitenauswertung in Phantom. WARNUNG Es sei darauf hingewiesen, dass ein Lesen von stdin ab Phantom 1.9.7 ein blockierender Aufruf ist. Allerdings gibt es eine Feature-Anfrage für 2.0, die diese async standardmäßig machen wird. Wenn Sie diese Technik verwenden Sie wollen defensiv blockieren auf der Stdin lesen, für den Fall, dass die Dinge in der Zukunft ändern. Der letzte Schritt ist, snag die Bytes von stdout sicher, dass die Aufruf der WaitForExit Methode des Prozesses geschieht, nachdem Sie einen Verweis auf die stdout nehmen. Mit der Bestellung wird sichergestellt, dass Sie den gesamten Inhalt von stdout ablesen. Schließlich konvertieren Sie die Zeichenfolge in ein Byte-Array und zurück. Wie ich bereits in der Einleitung erwähnt habe, können Sie Ihr Byte-Array einem Dataset hinzufügen und dann ein Image-Element eines RDLC dem Dataset zuordnen, so dass Sie dynamischen Bildinhalt für Berichte erhalten. Sie könnten diese Technik in Integrationstests verwenden, um sicherzustellen, dass die Positionen der Elemente auf der Seite nicht verschoben wurden. Oder sogar als eine einfache Archivierung Technik zu kratzen und speichern Sie den Status einer Website.

No comments:

Post a Comment