首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用PhantomJS登录到Protonmail

无法使用PhantomJS登录到Protonmail
EN

Stack Overflow用户
提问于 2017-12-13 00:13:31
回答 1查看 99关注 0票数 1

我正试着用PhantonJS进入protonmail。我输入了我的登录名和密码,然后我想按下login按钮。不要按。当我试着按的时候。所以。

代码语言:javascript
复制
page.evaluate(function(ps,p){
    var eps=ps;
    var ep=p;
    document.getElementById("username").value = eps;
    document.getElementById("password").value = ep;
    var lbx1x1x1a = document.getElementById("login_btn");
    var lbx1x1x1e = document.createEvent("MouseEvents");
    lbx1x1x1e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    lbx1x1x1a.dispatchEvent(lbx1x1x1e);
},ps,p);

不起作用,什么也不会发生

所以:

代码语言:javascript
复制
 var point = page.evaluate(function () {
    var element = document.getElementById('login_btn');
    var rect = element.getBoundingClientRect();
         return {
                 x: rect.left + Math.floor(rect.width / 2),
                y: rect.top + Math.floor(rect.height / 2)
        };
});
point.x=Math.floor(point.x);
point.y=Math.floor(point.y); 
console.log(point.x+" "+point.y);
page.sendEvent('click', point.x, point.y);

不起作用,什么也不会发生

代码语言:javascript
复制
page.evaluate(function(ps,p){
    var eps=ps;
    var ep=p;
    document.getElementById("username").value = eps;
   document.getElementById("password").value = ep;
    document.getElementById("pm_login").submit();

},ps,p);

不起作用,但日志和密码字段会被清除

代码语言:javascript
复制
page.evaluate(function(ps,p){
    var eps=ps;
    var ep=p;
    document.getElementById("username").value = eps;
    document.getElementById("password").focus();
},ps,p);

page.sendEvent('keypress', "123\r"); 
page.sendEvent('keypress', page.event.key.A, null, null, 0x02000000 | 0x08000000);

不起作用,什么也不会发生

代码语言:javascript
复制
page.evaluate(function(ps,p){
    var eps=ps;
    var ep=p;
    document.getElementById("username").value = eps;
    document.getElementById("password").value = ep;
    document.getElementById("login_btn").focus();
},ps,p);

page.sendEvent('keypress', "\r"); 
page.sendEvent('keypress', page.event.key.A, null, null, 0x02000000 | 0x08000000);

不起作用,什么也不会发生。没有更多的想法,你呢?谢谢。

Phantomjs 2.1.1

你好!谢谢你的Vaviloff)。我粘贴了该代码,以便进行错误检测。

代码语言:javascript
复制
page.evaluate(function(ps,p){
    var eps=ps;
    var ep=p;
    document.getElementById("username").value = eps;
    document.getElementById("password").value = ep;
    document.getElementById("login_btn").click();
    var lbx1x1x1a = document.getElementById("login_btn");
    var lbx1x1x1e = document.createEvent("MouseEvents");
    lbx1x1x1e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    lbx1x1x1a.dispatchEvent(lbx1x1x1e);
},ps,p);

    page.onResourceError = function(resourceError) {
        console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
        console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
    };

    page.onConsoleMessage = function(msg, lineNum, sourceId) {
        console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
    };

    page.onError = function(msg, trace) {
        var msgStack = ['ERROR: ' + msg];
        if (trace && trace.length) {
            msgStack.push('TRACE:');
            trace.forEach(function(t) {
                msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
            });
        }
        console.error(msgStack.join('\n'));
    };

没有错误。当我运行phantomjs时,我在控制台中收到以下消息,但那是在我尝试单击登录之前。

代码语言:javascript
复制
TypeError: undefined is not a constructor (evaluating 'navLang.includes("-")')
https://protonmail.com/js/site.js?rel=b38297243e:6
https://protonmail.com/js/site.js?rel=b38297243e:2 in j
https://protonmail.com/js/site.js?rel=b38297243e:2 in fireWith
https://protonmail.com/js/site.js?rel=b38297243e:2 in ready
https://protonmail.com/js/site.js?rel=b38297243e:1 in J

同时,在同一页面上,我可以点击其他元素,它就会起作用。下面的代码按其应有的方式工作。

代码语言:javascript
复制
page.evaluate(function(ps,p){
    var eps=ps;
    var ep=p;
    document.getElementById("username").value = eps;
    document.getElementById("password").value = ep;
    var lbx1x1x1a =document.getElementsByClassName ("loginForm-btn-help")[0];
    var lbx1x1x1e = document.createEvent("MouseEvents");
    lbx1x1x1e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    lbx1x1x1a.dispatchEvent(lbx1x1x1e);

},ps,p);

代码语言:javascript
复制
page.evaluate(function(ps,p){
    var eps=ps;
    var ep=p;
    document.getElementById("username").value = eps;
    document.getElementById("password").value = ep;
    var lbx1x1x1a =document.getElementsByClassName ("loginForm-actions-main pm_button primary pull-right loginForm-btn-submit")[0];
    var lbx1x1x1e = document.createEvent("MouseEvents");
    lbx1x1x1e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    lbx1x1x1a.dispatchEvent(lbx1x1x1e);
},ps,p);

ScreenShot - signup

其他元素可以点击,不能登录。我不能按它。诱饵在哪里?谢谢。

所以也不起作用:

代码语言:javascript
复制
page.includeJs('https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js');
    setTimeout(InterLoginData, 90000);


function InterLoginData(){
console.log ("Phantomjs.InterLoginData and Login.");
page.evaluate(function(ps,p){
    var eps=ps;
    var ep=p;
    document.getElementById("username").value = eps;
   document.getElementById("password").value = ep;
    //document.getElementById("password").focus();

    document.getElementById("login_btn").click();
    document.getElementById("login_btn").submit();

    $("login_btn").click();
    $("#login_btn").click();

    $("login_btn").submit();
    $("#login_btn").submit();


},ps,p);

在Google chrome控制台上:

代码语言:javascript
复制
document.getElementById("login_btn").click();

这段代码是:

代码语言:javascript
复制
var lbx1x1x1a = document.getElementById("login_btn");
var lbx1x1x1e = document.createEvent("MouseEvents");
lbx1x1x1e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
lbx1x1x1a.dispatchEvent(lbx1x1x1e);

工作正常。请抛出你的想法。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-15 04:21:54

结果,按钮被按下了。但。事实证明,在代码之后:

代码语言:javascript
复制
page.evaluate(function(ps,p){
   var eps=ps;
   var ep=p;
   document.getElementById("username").value = eps;
   document.getElementById("password").value = ep;
},ps,p); 

页面认为登录名和密码字段未填写。页面给出了一条消息,要求填写字段。我没有在屏幕截图中看到这个网站,因为它出现的时间很短,而在屏幕截图的时候它已经消失了。通过在SlimerJS中运行代码,我能够看到这一点(谢谢)。下面的代码正常工作,输入的按钮被按下,我进入了我的邮件。)谢谢大家。

代码语言:javascript
复制
//*************
var ps="PUT_LOGIN_HERE"
var p="PUT_PASSWORD_HERE"
//*************

page.evaluate(function(){
    document.getElementById("username").focus();
});
page.sendEvent('keypress', ps);


page.evaluate(function(){
    document.getElementById("password").focus();
});
page.sendEvent('keypress', p);
page.sendEvent('keypress', "\n");//Enter
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47776993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档