Mri*_*lla 10 javascript phantomjs
我正在使用PhantomJS登录网站做某事.该网站使用OAuth进行登录.点击该按钮上的"登录"按钮,即可转到OAuth服务.在那里输入您的凭据并单击"提交",您将被重定向回原始站点.我的脚本工作正常,但依赖于看似不太强大的超时.
如何重写此代码,以便setTimeout我可以等到页面准备就绪,而不是使用它.我经常看到页面没有准备好的错误,因此jQuery没有初始化.
我对Javascript不是很好,所以一个例子会有所帮助.这是我经过大量谷歌搜索后一起攻击的内容.这是我的代码:
var page = require('webpage').create();
var system = require('system');
page.settings.resourceTimeout = 10000;
page.onResourceTimeout = function(e) {
console.log("Timed out loading resource " + e.url);
};
page.open('https://mysite.com/login', function(status) {
if (status !== 'success') {
console.log('Error opening url');
phantom.exit(1);
} else {
setTimeout(function() {
console.log('Successfully loaded page');
page.evaluate(function() {
$("#submit-field").click(); //Clicking the login button
});
console.log('Clicked login with OAuth button');
setTimeout(function() {
console.log('Addding the credentials');
page.evaluate(function() {
document.getElementById("username").value = 'user@example.com';
document.getElementById("password").value = 'P@ssw0rd';
document.getElementById("Login").click();
});
console.log('Clicked login button');
setTimeout(function() {
//Inject some jQuery into the page and invoke that here
console.log('Clicked the export button');
}, 15000);
}, 15000);
});
}
});
Run Code Online (Sandbox Code Playgroud)
Mri*_*lla 15
似乎这样做的唯一方法是使用从DOM到PhantomJS的回调.
var page = require('webpage').create();
var system = require('system');
page.onInitialized = function() {
page.onCallback = function(data) {
console.log('Main page is loaded and ready');
//Do whatever here
};
page.evaluate(function() {
document.addEventListener('DOMContentLoaded', function() {
window.callPhantom();
}, false);
console.log("Added listener to wait for page ready");
});
};
page.open('https://www.google.com', function(status) {});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15125 次 |
| 最近记录: |