От седмици се опитвам да автоматизирам задача за сърфиране. Задачата е проста: влезте, щракнете върху връзки, въведете променлива и изпратете, излезте. Трябва да създам уебсайт, който прави това (нещо като по-опростен интерфейс). Имайте предвид, че уебсайтът използва сервлети и нямам достъп до кодовете на уебсайта. Първоначално опитах CURL, но тъй като имаше някои Ajax елементи в страницата curl не можа да покаже това съдържание. Опитах .NET Webdriver, JUnit, Selenium и т.н. Но всички се провалиха при изобразяването на ajax елементи. Опитах perl и python mechanize, докато perl не работи, успях да получа динамичното съдържание с python. Проблемът не е, че имам връзки, които са изпълнение на Javascript, те започват с Javascript: и не мисля, че мога да извиквам функции с Mechanize. Някой знае ли дали тази задача изобщо е възможна?
Как да автоматизирам задача за сърфиране?
Отговори (2)
Модулът Perl WWW::Mechanize
е най-популярният начин за автоматизиране на задачи за сърфиране в мрежата като изтегляния, качвания, изпращане на формуляри, удостоверяване, просто сърфиране, изтриване на екрана и т.н.
В случай, че уебсайтът съдържа Javascript, популярният модул на Perl за обработка на тях е да се използва WWW::Mechanize::Firefox
.
Досега „почти“ всеки вид уебсайт, включително технологии като JavaScript и Ajax и използващи SSL защита, и/или достъп чрез прокси сървър, може да се управлява от комбинация от модулни методи на Perl, принадлежащи към LWP::UserAgent
и WWW::Mechanize
или WWW::Mechanize::Firefox
. Много примери са налични в мрежата.
Пример за използване на casperjs:
var casper = require('casper').create({
verbose: true,
logLevel: 'debug'
});
casper.start(
'http://example.com',
function() {
this.evaluate( function() {
return $('#someElementId div').length; // This runs as if it was on the page
});
this.fill(
'#formId',
{
email: '[email protected]',
password: 'password123'
},
true
); // This submits login form
}
);
Casperjs съхранява бисквитки, така че заявките към по-дълбоки страници няма да се провалят.
Вижте fill() за подробности относно изпращането на формуляри.
Вижте evaluate() за изпълнение на js, сякаш е изпълнен на страницата, която тествате.
Ако искате да тествате AJAX действия - няма проблем. Те ще се изпълняват, сякаш страницата работи в браузъра, можете да видите резултатите в DOM. Можете да ги стартирате ръчно с помощта на evaluate().
waitFor
s, за да накарате Ajax да играе добре? Как точно се "провали"? - person Silas Ray   schedule 18.07.2012