Dies ist ein Skript vorgibt, in Ihrem Google-Konto einzuloggen (ich habe gemacht). Aber offensichtlich funktioniert das nicht. Es gibt hier kein bestimmtes Ziel, aber dafür, dass es funktioniert.PhantomJS Bug in grundlegenden Skript
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');
});
Am Ende bekomme ich diese Fehler:
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
ich viele Möglichkeiten, und niemand arbeitete versucht. Ich könnte es mit Python und Selen-Web-Treiber (was wirklich Liebe war) machen. Aber jetzt ist die Zeit vergangen, und es muss in Javascript sein (um vollständig DOM/jQuery ... so Web-kompatibel zu sein).
Können Sie mir bitte helfen, damit es funktioniert!
EDIT 1: indem Sie versuchen, einen Screenshot zu erfassen, speichert es ein leeres PNG.
EDIT 2: Ich denke, dass ein Hinweis darauf sein kann, wenn ich PhantomJS test.js tun, ist es eine sehr lange Zeit in Anspruch nimmt, um endlich zu laden und meldet sich schnell alles ...
EDIT 3: Dokument, das ich geändert. get (...). value = 'blabla' bis $ ('# id'). val ('blabla'); Und jetzt druckt es
CONSOLE: launching 0
CONSOLE: launching 1
CONSOLE: launching 2
CONSOLE: launching 3
CONSOLE: SUCCESS!
CONSOLE: SUCCESS!
CONSOLE: SUCCESS!
CONSOLE: SUCCESS!
CONSOLE: SUCCESS!
Es sollte jedoch nur einen ERFOLG drucken, und offensichtlich erfassen noch funktioniert nicht.
Ich denke, '.value' ist keine Eigenschaft eines DOM-Elements in Javascript. Versuchen Sie, 'jQuery ('# Email'). Val ('[email protected]')' wie in jQuery zu verwenden? Was ist der DOM-Typ des Elements 'Email'? – Fredster
Aber warum dauert es ewig zu laden? –
Sie hatten Recht über. Wert Jetzt druckt, was ich in EDIT 3 –