Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to read user input from keyboard for PhantomJS?

I'm using PhantomJS to login website and the captcha has to be inputed manually. How can I save the captcha image to disk, and then input the captcha by hand in PhantomJS console?

like image 652
aztack Avatar asked May 08 '13 23:05

aztack


2 Answers

I had the same problem, just use the system module in combination with a page.render() and some argument passing to page.evaluate.

page.render('pagewithcatpcha.jpg');
page.injectJs('http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js');

var arg1 = consoleRead();

page.evaluate(function (arg1) {
 $('.yourFormBox').val(arg1);
 $('.yourForm').submit();
}, arg1);

function consoleRead() {
 var system = require('system');

 system.stdout.writeLine('CaptchaCode: ');
 var line = system.stdin.readLine();

 return line;
}
like image 140
toxicate20 Avatar answered Sep 20 '22 05:09

toxicate20


What you're asking sounds nearly impossible.

If I were desperate to do something like this I might consider the following approach:

  • grab the capture, save to disk as image
  • output to the console to tell user image is ready
  • use window.setTimeout to wait 30 seconds
  • user then edits a text file (e.g. /tmp/code.txt) with capture result
  • after 30 seconds the callback in window.setTimeout will read /tmp/code.txt

It's not pretty. But I can't think of any other way off the top of my head.

like image 22
PP. Avatar answered Sep 21 '22 05:09

PP.