PhantomJS a web s formulářem

ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
PhantomJS a web s formulářem
« kdy: 09. 08. 2013, 10:13:48 »
Ahojte,
experimentuju s phantomJs  a základní věci se už zadařili, nyní ale řeším tento problém:
mám webpage a ta obsahuje formulář s mnoha checkboxy a poslední záložka formuláře obsahuje submit pro odeslání po kterém se načte stránka zobrazující uživatelův výběr z předchozího formuláře a tento výběr bych rád umožnil exportovat do pdf. napadlo mě že bych na stránku s výběrem bych si vytvořil proměnou a do ní zachytil aktuální url:
  $request_url = apache_getenv("HTTP_HOST") . apache_getenv("REQUEST_URI");

dálel button, který by volal něco jako php exec:
exec("phantomjs /templates/new/js/pdf.js "request_url"  ");

ale někde dělám něco špatně...
nemáte někdo zkušenost prosím?...děkuji
« Poslední změna: 09. 08. 2013, 10:27:24 od Petr Krčmář »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
Re:PhantomJS a web s formulářem
« Odpověď #1 kdy: 12. 08. 2013, 13:12:12 »
hoši tak tady jsem si pěkně naběhl...teď si uvědomuju že v momentě kdy formulář odešlu, tak se vyrenderuje na straně klienta, tudíž phantomjs vůbec neví co se tam zobrazilo
nenapadá nikoho nic?,  jak vyrenderovat pdf v takovémto případě...
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

bydga

Re:PhantomJS a web s formulářem
« Odpověď #2 kdy: 13. 08. 2013, 18:39:31 »
prostě to html co máš ( jakkoliv clientside upravený) pošleš na server kde je ten phantom?

zjednodušená ukázka:

$('#export-to-pdf').click( function() { $.post('http://phantomserver.com/phantom.php', $('html').html(), function() { ....  }); });

a phantom.php
$html = $_POST['html'];
file_put_contents("tmp.html", $html);
exec("phantomjs tmp.html tmp.pdf");
$pdf = file_get_contents("tmp.pdf");
header("content-type: application/pdf");
echo $pdf;
exit;


ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
Re:PhantomJS a web s formulářem
« Odpověď #3 kdy: 14. 08. 2013, 09:38:56 »
Ahoj.....
to zní velmi rozumně a funkčně.....
hned jak tady dodělám grafiku která je právě z velké části obsah zmiňovaných exportů, vyzkouším
moooc děkuji za typ/radu
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
Re:PhantomJS a web s formulářem
« Odpověď #4 kdy: 14. 08. 2013, 10:45:42 »
inspiroval jsi mne k něčemu co mi lítalo v hlavě, ale nedaří se mi to .....
na page která se vyrenderuje na straně klienta umístém input submit:
<input type="submit" id="export-pdf" value="send" name="submit">
dále pak script zajišťující odeslání celé page na server kde naslouchá phantom:
<script>
$('input#export-pdf').click(function(){
 
    var html = $("body").html();
    var data = { html: html };
    $.post("http://server_IP/create-pdf.php", data);
});                        
</script>

kde ještě dělám chybu?  :(
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
Re:PhantomJS a web s formulářem
« Odpověď #5 kdy: 14. 08. 2013, 11:36:41 »
tcpdumpem jsem teď poslochal odchozí provoz s filtrem na destination IP kam směřuje $.post v js scriptu a když zkusím prokliknout na input(submit) #export-pdf, tak jde vidět že na odchozím trafiku letí pakety na uvedenou IP....vipadá to tedy, že k odeslání dojde, ale proč se neděje nic na straně serveru netuším.
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
Re:PhantomJS a web s formulářem
« Odpověď #6 kdy: 15. 08. 2013, 16:23:03 »
zatím se mi to nepodařilo rozchodit a tak jsem si řekl, že je namístě začít analyzovat korektnost každého zápisu už samotného začátku a první věc, kterou si nejsem vůbec jist je definovaní proměné "html":
var html = $("body").html();
$(selector).html()  ....nikde se nemohu dočíst kam až nahoru v DOM struktuře dokáže sáhnout selektor a vážně se obávám, že dosáhne na body a vrcholové html
po konzultaci s pár lidmi to spíše vypadá na:
var html = document.documentElement.outerHTML;

právě s tím experimentuju a zatím nemám hmatatelný výsledek, ale jsestli jsou z praxe jiné nápady prosím sem s nimi
děkuji
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

bydga

Re:PhantomJS a web s formulářem
« Odpověď #7 kdy: 19. 08. 2013, 13:20:53 »
http://prntscr.com/1m4umg tohle určitě funguje..

pozor, ajaxem nejde zpracovat příchozí content-attachment. pouze response body. nestačí $.post (i když jsem ti ho pro zjednodušení napsal), ale musíš udělat standartní http request. dělá se to fíglem, že vytvoříš form, submittneš a odebereš ho:

Kód: [Vybrat]
download = function ( url, data, method ) {
  data = typeof data == 'string' ? data : $.param( data );
  var inputs = '';
  $.each( data.split( '&' ), function () {
    var pair = this.split( '=' );
    inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
  });
  $( '<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>' ).appendTo( 'body' ).submit().remove();
};


ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
Re:PhantomJS a web s formulářem
« Odpověď #8 kdy: 02. 09. 2013, 11:10:46 »
Ahoj,
moc díky...
dneska jsem se vrátil z dovolené a právě to zkouším aplikovat - zatím bez výsledku, ale nejspíš to nechápu dobře...
do url jsem si dosadil adresu kde naslouchá phantom script a funkci pak volám přes button:
Kód: [Vybrat]
<script>
download = function ( 'http://.../create-pdf.php', 'data', 'method' ) {
  data = typeof data == 'string' ? data : $.param( data );
  var inputs = '';
  $.each( data.split( '&' ), function () {
    var pair = this.split( '=' );
    inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
  });
  $( '<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>' ).appendTo( 'body' ).submit().remove();
};
</script>
<input id="click" type="button" value="create PDF" onclick="download()">
« Poslední změna: 02. 09. 2013, 14:27:05 od Roman Bořánek »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
Re:PhantomJS a web s formulářem
« Odpověď #9 kdy: 02. 09. 2013, 11:34:48 »
beru zpět:
přepsal jsem se a napsal jsem link přímo jako argument!
ten musím zapsat až kdyý funkci volám......
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 087
    • Zobrazit profil
    • E-mail
Re:PhantomJS a web s formulářem
« Odpověď #10 kdy: 02. 09. 2013, 12:30:29 »
tak po kliknutí na button se naserveru v příslušném adresáři skutečně vytvoří tmp.html
otevře se i prohlížeč PDF dokumentů ovšem s hláškou "Unable to open document..No such file or directory" a pdf soubor se na serveru nevytvoří......když se podívám na soubor tmp.html má 0 Kb a nic neobsahuje...je prázdný
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

bydga

Re:PhantomJS a web s formulářem
« Odpověď #11 kdy: 02. 09. 2013, 13:17:07 »
z toho evidentne vyplyva, ze nejsi schopny ani prenyst data na server, to nema s phantomem nic spolecnyho...