In esecuzione Phantomjs utilizzando C# per afferrare snapshot della pagina web

Sto cercando di afferrare le istantanee del mio sito web utilizzando phantomjs – fondamentalmente, questo è quello di creare un “immagine di anteprima” dei contenuti inviati dall’utente.

Ho installato phantomjs sul server e hanno confermato che in esecuzione dalla riga di comando contro le pagine funziona bene. Tuttavia, quando cerco di eseguirlo dal sito, non sembra fare nulla. Mi hanno confermato che il codice viene chiamato, che il phantom è effettivamente in esecuzione (ho controllato i processi, e può vederlo apparire nel processo di lista quando mi chiamano) – tuttavia, l’immagine non viene generato.

Non so dove devo guardare per capire perché non creare le immagini – eventuali suggerimenti? Il relativo blocco di codice qui di seguito:

string arguments = "/c rasterize.js http://www.mysite.com/viewcontent.aspx?id=123";
string imagefilename = @"C:\inetpub\vhosts\mysite.com\httpdocs\Uploads\img123.png";

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.FileName = @"C:\phantomjs.exe";
p.StartInfo.Arguments = arguments + " " + imagefilename;

p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
  • Hai controllato che output è effettivamente? C’è una buona possibilità che quando si inizia a non avere sufficienti privilegi per salvare la posizione che si desidera… Considerate dumping account utente corrente da Phantom script (non so come), per vedere quello che conto è endup in esecuzione.
  • È in esecuzione come .NETTO del conto generale – come quando un utente tenta di caricare un’immagine (e sto salvando l’immagine generata nella stessa directory, quindi dovrebbe avere accesso in scrittura alla directory).
  • Iniziare con qualcosa di semplice, ad esempio PhantomJS script per visualizzare “Ciao mondo”. Vedere se restituisce il messaggio correttamente o meno.
  • Se l’esecuzione di un semplice script che prende le età, si può essere interessati dal proxy problema su Windows (vedi code.google.com/p/phantomjs/issues/detail?id=580). Tenta di aggiungere --proxy-type=none argomento della riga di comando per il server proxy.
  • grazie. Finito per usare un diverso sistema di raschiatura, che prende anche un po’, ma era in grado di eseguire il debug di meglio – è stato una sorta di errore di accesso al file, ma phantomjs non mi dà abbastanza informazioni.
  • Elie posso chiederti cosa hai usato per raschiare? Grazie.
  • C’è un programma in C# ho trovato online che utilizza il costruito nel browser. Non ricordo che programma è, ma ho trovato suggerimenti per lavorare con esso qui COSÌ….

InformationsquelleAutor Elie | 2012-12-27

 

2 Replies
  1. 9

    Posso controllare gli errori che phantomjs genera durante il suo processo.
    Si può leggere dal Processo.StandardError.

    var startInfo = new ProcessStartInfo();
    //some other parameters here
    ...
    startInfo.RedirectStandardError = true;
    var p = new Process();
    p.StartInfo = startInfo;
    p.Start();
    p.WaitForExit(timeToExit);
    //Read the Error:
    string error = p.StandardError.ReadToEnd();

    Vi darà un’idea di ciò che è accaduto

  2. 7

    Il modo più semplice per eseguire phantomjs da codice C# utilizza wrapper come NReco.PhantomJS. Nell’esempio seguente viene illustrato come utilizzare per rasterize.js:

    var phantomJS = new PhantomJS();
    phantomJS.Run( "rasterize.js", new[] { "https://www.google.com", outFile} );

    Wrapper API per gli eventi è per lo stdout e stderr; inoltre è in grado di fornire in ingresso da C# Streaming e leggere stdout risultato in C# stream.

Lascia un commento