Как да автоматизирам задача за сърфиране?

От седмици се опитвам да автоматизирам задача за сърфиране. Задачата е проста: влезте, щракнете върху връзки, въведете променлива и изпратете, излезте. Трябва да създам уебсайт, който прави това (нещо като по-опростен интерфейс). Имайте предвид, че уебсайтът използва сервлети и нямам достъп до кодовете на уебсайта. Първоначално опитах CURL, но тъй като имаше някои Ajax елементи в страницата curl не можа да покаже това съдържание. Опитах .NET Webdriver, JUnit, Selenium и т.н. Но всички се провалиха при изобразяването на ajax елементи. Опитах perl и python mechanize, докато perl не работи, успях да получа динамичното съдържание с python. Проблемът не е, че имам връзки, които са изпълнение на Javascript, те започват с Javascript: и не мисля, че мога да извиквам функции с Mechanize. Някой знае ли дали тази задача изобщо е възможна?


person user1470618    schedule 17.07.2012    source източник
comment
Опитахте ли да използвате selenium waitFors, за да накарате Ajax да играе добре? Как точно се "провали"?   -  person Silas Ray    schedule 18.07.2012
comment
Selenium се провали при влизане. Използвах .NET обвивката на селен и не успях да премина през екрана за влизане. Получих грешка Трябва да въведете парола. (да, имената за полетата на формуляра бяха правилни)   -  person user1470618    schedule 18.07.2012
comment
ЧЗВ за Mechanize съдържа заобиколно решение за липсата на поддръжка на Javascript и изброява много модули, които имат поддръжка на Javascript.   -  person daxim    schedule 18.07.2012
comment
Вече опитах всичко и не успях.   -  person user1470618    schedule 18.07.2012


Отговори (2)


Модулът Perl WWW::Mechanize е най-популярният начин за автоматизиране на задачи за сърфиране в мрежата като изтегляния, качвания, изпращане на формуляри, удостоверяване, просто сърфиране, изтриване на екрана и т.н.

В случай, че уебсайтът съдържа Javascript, популярният модул на Perl за обработка на тях е да се използва WWW::Mechanize::Firefox.

Досега „почти“ всеки вид уебсайт, включително технологии като JavaScript и Ajax и използващи SSL защита, и/или достъп чрез прокси сървър, може да се управлява от комбинация от модулни методи на Perl, принадлежащи към LWP::UserAgent и WWW::Mechanize или WWW::Mechanize::Firefox. Много примери са налични в мрежата.

person AnBisw    schedule 18.07.2012
comment
Начинът, по който го разбирам, WWW::Mechanize::Firefox изисква MozlRepl, което е разширение на firefox и няма нищо общо с моята среда на командния ред. - person user1470618; 18.07.2012
comment
Какъв вид среда на командния ред използвате? Можете да използвате WWW::Scripter и за работа с javascript. - person AnBisw; 18.07.2012
comment
Благодаря Annjawn, Just linux, Работата е там, че се опитвам да създам уебсайт, който приема идентификационни данни и ще изпълнява скрипт за автоматизиране на някои задачи, следователно всички задачи трябва да се изпълняват в скрипта, ще разгледам и Scripter. Но донякъде стигам до заключението, че въпреки това, което всички казват, работата със сложни уебсайтове със скриптове е, ако е възможно, изключително трудна и зависима от модула. - person user1470618; 19.07.2012
comment
Да, това е вярно. Има множество начини за създаване на динамични обекти в уеб страници и всеки от тях има свои собствени свойства, боравенето с всички тези видове с помощта на стандартен модул е ​​трудно. Има куп други модули, които можете да разгледате, но почти всички изискват приставка за уеб браузър. - person AnBisw; 19.07.2012

Пример за използване на 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().

person Sergey Eremin    schedule 17.07.2012
comment
ООООО куп произволни връзки! - всякаква повече информация би била полезна. - person rlemon; 18.07.2012
comment
Selenium WebDriver не успя на Ajax елементи. - person user1470618; 18.07.2012
comment
Освен това сигурни ли сте, че ще мога да стартирам javascript от страна на сървъра с Phantom? - person user1470618; 18.07.2012