CasperJs Google login

六月ゝ 毕业季﹏ 提交于 2019-12-12 04:13:56

问题


I having been working on some code to access my google CSE For that I need to sign in with my google account.

I have the following code:

var casper = require('casper').create({
    verbose: true,
   logLevel: 'debug',
   waitTimeout: 5000,
   clientScripts: ["libs/jquery.min.js"],
   userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) 
   AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'
});



const google_email = "MY_EMAIL";
const google_passwd = "MY_PASSWORD";
const loginUrl = 'https://accounts.google.com';


casper.start(loginUrl, function() {
    this.waitForSelector('#view_container > form');
});


casper.then(function() {
    this.fillSelectors('#view_container > form', {
    'input[name="identifier"]': google_email
    }, false);
});
casper.then(function() {
    this.click('#identifierNext');
});

casper.wait(500, function() { //Wait for next page to load
    this.capture('images/step01.png');
});

casper.then(function() {
    this.evaluate(function () {
        var identifierNext = $('#identifierNext');
        identifierNext.click();
    });
});

casper.then(function() {
    this.capture('images/step02.png');
});

 casper.run(function() {
     this.echo("Done");
 });

The part of entering the email seems to work.

But the click part isn't working.

I found this but it seems outdated.

Thanks


回答1:


I haven't fixed the issue related to the new form, but we found a way to access the old form, so the "old" scripts should still work, and that solution is disabling JS. For that, change the loginUrl to

https://accounts.google.com/ServiceLogin?passive=1209600&continue=https%3A%2F%2Faccounts.google.com%2FManageAccount&followup=https%3A%2F%2Faccounts.google.com%2FManageAccount&flowName=GlifWebSignIn&flowEntry=ServiceLogin&nojavascript=1#identifier

Important thing: nojavascript=1

We are using the script posted in Casperjs Google Login Not working Just changing the login URL.




回答2:


Try this - a lot more delays are needed to wait for the dynamically loaded pages.

casper.options.verbose = true; // verbose reporting
casper.options.logLevel = 'debug'; // full log reporting
casper.options.exitOnError = false; // Keep going on error

const google_email = "EMAIL";
const google_passwd = "PASSWORD";
const loginUrl = 'https://accounts.google.com';

// Load the login page
casper.start(loginUrl, function() {
    this.waitForSelector('#view_container'); // '> form' doesn't seem to work
});

// Fill in the 'username' form
casper.then(function() {
    this.fill('form', {
        identifier: google_email,
    });
    this.sendKeys('#view_container', casper.page.event.key.Enter , {keepFocus: true});
});

// First 'Enter' is too quick for Google, send another one after a pause
casper.wait(2500, function() {
    this.sendKeys('#identifierId', casper.page.event.key.Enter , {keepFocus: true});
});

// Wait for the 'password' form
casper.waitForSelector("#passwordNext", function() {
    this.echo("password form is apparently available");
});

// Password form seems to load slowly, even if the selector is found/visible, this delay ensures next form fill works
casper.wait(2500, function() {
    this.echo("password form is really available");
});

// Fill in the 'password' form
casper.then(function() {
    this.fill('form', {
        password: google_passwd,
    });
    this.sendKeys('#view_container', casper.page.event.key.Enter , {keepFocus: true});
});

// First 'Enter' is too quick for Google, send another one after a pause
casper.wait(500, function() {
    this.sendKeys('input.whsOnd.zHQkBf', casper.page.event.key.Enter , {keepFocus: true});
});

// Extend timeout to allow for slow dynamic page rendering
casper.options.waitTimeout = 25000;
casper.waitForSelector("#gb", function() {
    this.echo("login complete");
});

casper.thenOpen('https://(google app you want)', function() {
    // Check it opened okay
});


来源:https://stackoverflow.com/questions/44550584/casperjs-google-login

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!