PhantomJS рдЬреЗрдПрд╕ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдирдХреЛрдВ рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдХрдВрд╕реЛрд▓ рд╕реЗ рд╕рднреА WebKit рдмрдиреНрд╕ рд╣реИрдВ: DOM, CSS, JSON, Canvas рдФрд░ SVGред
рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрдВрджрд░
рд▓рд╛рдВрдЪ
PhantomJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
phantomjs script.js [arguments]
рдХреЗ рдЙрдкрдпреЛрдЧ
рдпрд╣ рдлреИрдВрдЯрдордЬ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдРрдк рд╣реИ
console.log('Hello, world!'); phantom.exit();
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреГрд╖реНрда рд▓реЛрдб рд╕рдордп рджрд┐рдЦрд╛рдПрдЧрд╛:
if (phantom.state.length === 0) { if (phantom.args.length === 0) { console.log('Usage: loadspeed.js <some URL>'); phantom.exit(); } else { var address = phantom.args[0]; phantom.state = Date.now().toString(); console.log('Loading ' + address); phantom.open(address); } } else { var elapsed = Date.now() - new Date().setTime(phantom.state); if (phantom.loadStatus === 'success') { console.log('Page title is ' + document.title); console.log('Loading time ' + elapsed + ' msec'); } else { console.log('FAIL to load the address'); } phantom.exit(); }
рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
phantomjs loadspeed.js http://www.google.com
рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ
Loading http://www.google.com Page title is Google Loading time 719 msec
рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг
рдпрд╣, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред
рдХреНрд╡рд┐рдЯ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк
рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
if (phantom.state.length === 0) { if (phantom.args.length === 0 || phantom.args.length > 2) { console.log('Usage: run-qunit.js URL'); phantom.exit(); } else { phantom.state = 'run-qunit'; phantom.open(phantom.args[0]); } } else { setInterval(function() { var el = document.getElementById('qunit-testresult'); if (phantom.state !== 'finish') { if (el && el.innerText.match('completed')) { phantom.state = 'finish'; console.log(el.innerText); try { failed = el.getElementsByClassName('failed')[0].innerHTML; } catch (e) { } phantom.exit((parseInt(failed, 10) > 0) ? 1 : 0); } } }, 100); }
рдЬреИрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ
Tests completed in 1486 milliseconds. 1267 tests of 1267 passed, 0 failed.
рдкреНрд░рддрд┐рдкрд╛рджрди
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдЙрдкрдпреЛрдЧреА рдмрд╛рддред рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реА рд╕реЗрд╡рд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддрд╛ рд╣реИред
if (phantom.state.length === 0) { if (phantom.args.length !== 2) { console.log('Usage: rasterize.js URL filename'); phantom.exit(); } else { var address = phantom.args[0]; phantom.state = 'rasterize'; phantom.viewportSize = { width: 600, height: 600 }; phantom.open(address); } } else { var output = phantom.args[1]; phantom.sleep(200); phantom.render(output); phantom.exit(); }
рдЙрд╕реЗ
http://raphaeljs.com/polar-clock.html рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
phantomjs rasterize.js http://raphaeljs.com/polar-clock.html clock.png
рд╣рдо рдкреНрд░рд╛рдкреНрдд

рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдкреНрд░рд┐рдВрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкреАрдбреАрдПрдл рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
phantomjs rasterize.js "http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes" jakarta.pdf
рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЧрд╛

(FoxitPDF рд░реАрдбрд░ рдореЗрдВ рдордЬрдмреВрдд рдЬрд╝реВрдо рдЖрдЙрдЯ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛)
рдЖрдк рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдФрд░
рдЧреВрдЧрд▓ рдХреЛрдб рд╕реЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ:
http://www.phantomjs.org