これはあなたのGoogleアカウントにログインしようとしているスクリプトです(作成しました)。しかし、明らかに、それはうまくいきません。ここに特別な目的はありませんが、それを機能させることです。終わりPhantomJSの基本スクリプトのバグ
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log('CONSOLE: ' + msg);
};
page.open('https://google.com/', function() {
page.injectJs('jquery-2.2.1.min.js');
page.evaluate(function() {
function include(arr,obj) { // those functions are not part of scraping
return (arr.indexOf(obj) != -1);
}
function add(a, b) {
return a + b;
}
Array.min = function(array){
return Math.min.apply(Math, array);
};
function dofirst() {
$('#gb_70').click();
main(1, 0);
}
function dosecond() {
document.getElementById('Email').value = '[email protected]';
$('#next').click();
main(2, 0);
}
function dothird() {
document.getElementById('Passwd').value = 'P4SSW0RD';
$('#signIn').click();
main(3, 0);
}
function dofourth() {
L1 = ['test', 'test2', 'google'];
for (var i = 0; i < 1; i++) {
if (L1, 'google') {
console.log('SUCCESS!');
}
}
main(4, 0);
}
function dofifth() {
$('.gb_b.gb_8a.gb_R').click()
setTimeout(function(){$('#gb_71').click()}, 500);
main(0, 5000);
}
function main(i, j) {
if (i === 0) {
console.log('launching 0');
setTimeout(dofirst(), j); // connections
}
else if (i === 1) {
console.log('launching 1');
setTimeout(dosecond(), 5000);
}
else if (i === 2) {
console.log('launching 2');
setTimeout(dothird(), 5000);
}
else if (i === 3) {
console.log('launching 3');
setTimeout(dofourth(), 5000);
} else if (i === 4) {
console.log('launching 4');
setTimeout(dofifth(), 5000);
}
}
main(0, 5000);
});
console('super end');
page.render('google.png');
});
私はこれらのエラーを取得:
CONSOLE: launching 0
CONSOLE: launching 1
TypeError: null is not an object (evaluating 'document.getElementById('Email').value = '[email protected]'')
undefined:7 in dosecond
:22 in main
:4 in dofirst
:18 in main
:29
:30
は、私は多くの方法を試してみましたが、誰も働いていません。私はPythonとセレンのWebドライバ(本当の愛でした)でも動作させることができました。しかし、今は時間が経過し、javascript(完全にDOM/jQueryになるためにはWeb互換)にする必要があります。
私はそれを動作させるようにしてください!
編集1:スクリーンショットをキャプチャしようとすると、空のPNGが保存されます。
EDIT 2:私はそれがヒント、私はphantomjsのtest.jsを行うときに、それが最終的に迅速にすべてをロードして、ログに非常に長い時間がかかるかもしれないと思う...
EDIT 3:私は、ドキュメントを変更しました。 get(...)。value = 'blabla'を$( '#id')に設定します。val( 'blabla');そして今すぐ印刷する
CONSOLE: launching 0
CONSOLE: launching 1
CONSOLE: launching 2
CONSOLE: launching 3
CONSOLE: SUCCESS!
CONSOLE: SUCCESS!
CONSOLE: SUCCESS!
CONSOLE: SUCCESS!
CONSOLE: SUCCESS!
しかし、それは1つのSUCCESSだけを出力し、明らかにまだキャプチャは動作しません。 EDIT 1については
私は '.value'はjavascriptのDOM要素のプロパティではないと思います。 jQuery( '#Email')を使用しようとしていますか?jQueryのようにval( '[email protected]')? 'Email'要素のDOM型は何ですか? – Fredster
しかし、なぜロードに時間がかかりますか? –
あなたは正しいと思いました。 EDIT 3 –