Is there a way to read user input from keyboard fo

2019-03-09 12:48发布

问题:

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?

回答1:

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;
}


回答2:

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.