Это сценарий, притворяющийся для входа в вашу учетную запись 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 и селен веб-драйвером (который был настоящей любовью). Но теперь время прошло, и оно должно быть в javascript (чтобы быть полностью DOM/jQuery ... поэтому совместим с Интернетом).
Помогите пожалуйста, пожалуйста, чтобы это сработало!
EDIT 1: пытаясь сделать снимок экрана, он сохраняет пустой PNG.
EDIT 2: Я думаю, что может быть намеком, когда я phantomjs test.js, это занимает очень много времени, чтобы, наконец, загружать и регистрирует быстро все ...
EDIT 3: Я изменил документ. get (...). value = 'blabla' to $ ('# 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!
Однако он должен печатает только один УСПЕХ, и, видимо, захватить все еще не работает.
Я думаю, что '.value' не является свойством элемента DOM в javascript. Вы пытаетесь использовать 'jQuery ('# Email'). Val ('[email protected]')' как в jQuery? Что такое тип DOM элемента 'Email'? – Fredster
Но зачем понадобится возраст? –
Вы были правы. .value Теперь он печатает то, что я добавил в EDIT 3 –