4 de jan. de 2011

Crawler que processa Javascript

Tive um certo problema em fazer um Crawler que processa Javascript em Java. Depois de muito procurar e testar algumas ferramentas, encontrei uma bem legal, o Selenium (http://seleniumhq.org). A seguir, um breve tutorial:

Aí no netbeans coloquei como biblioteca cada um dos .jar que tinha lá, os dois principais e todos aqueles da pasta lib.
Aquele selenium-ide-1.0.8.xpi é bacana, dá pra ir testando direto no browser depois transformar em código fonte. Tem que instalar esse aqui tb: WebDriver Backed Formatters https://addons.mozilla.org/en-US/firefox/addon/85793/

Um exemplo de código fonte de navegação no site CompraFacil.com.br:

package teste;

import com.thoughtworks.selenium.*;
import org.openqa.selenium.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        WebDriver driver = new HtmlUnitDriver(true);//true para javascript
        Selenium selenium = new WebDriverBackedSelenium(driver, "http://www.comprafacil.com.br/");

        selenium.open("/");
        System.out.println("URL="+driver.getCurrentUrl());
        System.out.println("TITLE="+driver.getTitle());

        selenium.click("link=Brinquedos");
        selenium.waitForPageToLoad("30000");
        System.out.println("URL="+driver.getCurrentUrl());
        System.out.println("TITLE="+driver.getTitle());

        selenium.click("link=Bonecos");
        selenium.waitForPageToLoad("30000");
        System.out.println("URL="+driver.getCurrentUrl());
        System.out.println("TITLE="+driver.getTitle());

        selenium.click("link=regexp:^2$");
        selenium.waitForPageToLoad("30000");
        System.out.println("URL="+driver.getCurrentUrl());
        System.out.println("TITLE="+driver.getTitle());
        System.out.println("SRC="+driver.getPageSource());

        selenium.stop();
    }

}


Nenhum comentário: