【问题标题】:Is there a way to read user input from keyboard for PhantomJS?有没有办法从 PhantomJS 的键盘读取用户输入?
【发布时间】:2019-01-20 23:16:20
【问题描述】:

我使用 PhantomJS 登录网站,验证码必须手动输入。 如何将验证码图像保存到磁盘,然后在 PhantomJS 控制台中手动输入验证码?

【问题讨论】:

  • 保存文本..不是验证码呈现的文本
  • 没有文字,只有图片。您必须自己(由人类)识别,然后提交识别的文本。
  • this 例子,简单的方法从 PHP 中的文本生成验证码 ..
  • @matzone,抱歉我的英语不好。我想你没听懂。我没有制作验证码。

标签: javascript phantomjs


【解决方案1】:

我遇到了同样的问题,只需将系统模块与 page.render() 和一些传递给 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;
}

【讨论】:

  • 效果很好,除了我无法注入远程文件;相反,我使用 page.injectJs('jquery.min.js')
  • @AdamAlbright 使用外部 js 使用 page.includeJs('http://ajax...jquery.min.js'),从本地使用 page.injectJs('myJs.js'),而不是使用 :)。这个解决方案对我也很有效,+1!。
  • 效果很好。谢谢!
【解决方案2】:

你的问题听起来几乎是不可能的。

如果我急于做这样的事情,我可能会考虑以下方法:

  • 抓拍,作为图片保存到磁盘
  • 输出到控制台告诉用户图像准备好了
  • 使用 window.setTimeout 等待 30 秒
  • 然后用户编辑带有捕获结果的文本文件(例如/tmp/code.txt
  • 30 秒后 window.setTimeout 中的回调将读取 /tmp/code.txt

不漂亮。但我想不出任何其他办法。

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2013-06-25
    • 2017-12-10
    • 1970-01-01
    相关资源
    最近更新 更多