Pegar código fonte da pagina usando o web browser do eclipse (ECLIPSE.SWT)

Tenho esse exemplo aqui, usando uma classe do eclipse que integra o internet explorer num programa em java, o código é esse:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package TesteNavegador;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.browser.Browser;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Event;
    import org.eclipse.swt.widgets.Listener;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;
    import org.eclipse.swt.widgets.ToolBar;
    import org.eclipse.swt.widgets.ToolItem;

public class BrowserClass {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText(“Browser Example”);
shell.setSize(600,550);

ToolBar toolbar = new ToolBar(shell, SWT.NONE);  
toolbar.setBounds(5, 5, 200, 30);  

ToolItem goButton = new ToolItem(toolbar, SWT.PUSH);  
goButton.setText("Ir");  

ToolItem backButton = new ToolItem(toolbar, SWT.PUSH);  
backButton.setText("Voltar");  

ToolItem codigoFonteBotao = new ToolItem(toolbar, SWT.PUSH);  
codigoFonteBotao.setText("Codigo Fonte"); 


final Text text = new Text(shell, SWT.BORDER);  
text.setBounds(5, 35, 400, 25);  

final Browser browser = new Browser(shell, SWT.NONE);  
browser.setBounds(5, 75, 1200, 800);  

Listener listener = new Listener() {  
  public void handleEvent(Event event) {  
    ToolItem item = (ToolItem) event.widget;  
    String string = item.getText();  
    if (string.equals("Voltar"))  
      browser.back();  
    else if (string.equals("Stop"))  
      browser.stop();  
    else if (string.equals("Ir"))  
      browser.setUrl(text.getText()); 
    else if(string.equals("Codigo Fonte"))
        System.out.println("Código fonte da página:\n\n");
  }  
};  

goButton.addListener(SWT.Selection, listener);  
backButton.addListener(SWT.Selection, listener);  
codigoFonteBotao.addListener(SWT.Selection, listener);    

text.addListener(SWT.DefaultSelection, new Listener() {  
  public void handleEvent(Event e) {  
    browser.setUrl(text.getText());  
  }  
});  

shell.open();  
browser.setUrl("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/cnpjreva_solicitacao.asp");  
while (!shell.isDisposed()) {  
  if (!display.readAndDispatch())  
    display.sleep();  
}  
display.dispose();  

}}
[/code]
Gostaria de saber como posso pegar o codigo fonte dessa página, tentei olhar os metodos da classe browser mas nenhum parece me retornar o codigo fonte…

Eu tentaria com o Selenium.

Olá, o que seria o selenium? Pesquisei no google e encontrei uma IDE chamada Selenium, mas nada alem disso…

O Selenium é mais utilizado como uma ferramenta de testes do que para o que você quer.

Com ele você pode abrir um browser e acessar qualquer site. Dá para mandar alguns comandos também.

Hmm, poderia mandar o link de download desta ferramenta?
Alguem conhece algum outro jeito de pegar o codigo fonte, de preferencia usando o browser do eclipse awt, pois foi o unico jeito que vi que consegue renderizar paginas da web corretamente.

oi mateusviccari,

Está usando o Eclipse? Tem o Maven instalado? (me diz que sim)

Vá em New >> Other >> Maven >> Maven Project
Crie um projeto simples, preencha o resto das informações e espere o projeto ser criado.

No pom.xml, insira isso dentro das dependencies: <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.5.0</version> </dependency>Pronto. Tudo o que você precisa de libs está aí.

Dentro do src/main/java, crie suas packages e também crie uma classe de nome qualquer, para startar o projeto. Aqui vai um exemplo comentado (retirado de algum site que já não me lembro) : [code]package br.com.minhapackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Selenium2Example {

public static void main(String[] args) {
	// Cria uma nova instância do driver do Firefox
	// Perceba que o restante do código depende da interface,
	// não da implementação.
	WebDriver driver = new FirefoxDriver();

	// E agora use isso para visitar o Google
	driver.get("http://www.google.com");
	// Alternativamente pode ser feito da dessa forma
	// driver.navigate().to("http://www.google.com");

	// Encontra o elemento input pelo seu nome
	WebElement element = driver.findElement(By.name("q"));

	// Envia algo a ser pesquisado
	element.sendKeys("Cheese!");

	// Agora envia o form. WebDriver vai encontrar o form para nós pelo element
	element.submit();

	// Confere o título da página
	System.out.println("Page title is: " + driver.getTitle());

	// A pesquisa do Google é renderizada dinâmicamente com Javascript.
	// Espere a página carregar, timeout depois de 10 segundos
	(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
		public Boolean apply(WebDriver d) {
			return d.getTitle().startsWith("cheese!");
		}
	});

	// Deve aparecer: "cheese! - Google Search"
	System.out.println("Page title is: " + driver.getTitle());

	// Fecha o browser
	driver.quit();
}

}[/code] É só rodar. Qualquer coisa avise. Existem truques para esperar até um elemento ser carregado na tela.

Opa muito obrigado pela ajuda, ainda não testei pois nao tive oportunidade, mas me diz uma coisa, esse exemplo funciona pra pegar os dados que nao tem como pegar direto da pagina? Por exemplo, no site quando abre a pagina ele pede um captcha, somente digitando o captcha certo ele vai pra outra pagina que seria aquela que eu quero pegar os dados.
E as libs do selenium são instaladas junto com esse Maven?

[quote=mateusviccari]Opa muito obrigado pela ajuda, ainda não testei pois nao tive oportunidade, mas me diz uma coisa, esse exemplo funciona pra pegar os dados que nao tem como pegar direto da pagina? Por exemplo, no site quando abre a pagina ele pede um captcha, somente digitando o captcha certo ele vai pra outra pagina que seria aquela que eu quero pegar os dados.
E as libs do selenium são instaladas junto com esse Maven?[/quote]
1 - Infelizmente, eu realmente não posso falar nada sobre captchas. Dá pra dar bypass, mas eu acho que você vai ter que correr atrás.
2 - Não, o Maven é uma coisa, e o Selenium é outra.

pegar o codigo html com Apache Commons IO


try {
	
	FileUtils.copyURLToFile(new URL("http://www.google.com.br/search?&q=carro"),
			                new File("resp.txt"));
	
	System.out.println("Processo terminado");
	
	
} catch (MalformedURLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

com JSoup


Document doc = null;	

		try{	
			
			//conecta no site e pega o codigo html
		       doc = Jsoup.connect(alvo).userAgent("Mozilla").get();
		        doc = doc.normalise();
		       
		   }catch(Exception r){
			     r.printStackTrace();
			       return null; }

com HTTPClient


HttpClient httpclient = new DefaultHttpClient();
        try {
            HttpGet httpget = new HttpGet("http://www.site.com.br");

            System.out.println("executing request " + httpget.getURI());  

            // Create a response handler
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String responseBody = httpclient.execute(httpget, responseHandler);
            
               
            System.out.println("----------------------------------------");
            System.out.println(responseBody);
            System.out.println("----------------------------------------");

        } finally {
            // When HttpClient instance is no longer needed,
            // shut down the connection manager to ensure
            // immediate deallocation of all system resources
            httpclient.getConnectionManager().shutdown();
        }

acho q ta bom ne ?

[quote=jaboot]oi mateusviccari,

Está usando o Eclipse? Tem o Maven instalado? (me diz que sim)

Vá em New >> Other >> Maven >> Maven Project
Crie um projeto simples, preencha o resto das informações e espere o projeto ser criado.

No pom.xml, insira isso dentro das dependencies: <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.5.0</version> </dependency>Pronto. Tudo o que você precisa de libs está aí.

Dentro do src/main/java, crie suas packages e também crie uma classe de nome qualquer, para startar o projeto. Aqui vai um exemplo comentado (retirado de algum site que já não me lembro) : [code]package br.com.minhapackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Selenium2Example {

public static void main(String[] args) {
	// Cria uma nova instância do driver do Firefox
	// Perceba que o restante do código depende da interface,
	// não da implementação.
	WebDriver driver = new FirefoxDriver();

	// E agora use isso para visitar o Google
	driver.get("http://www.google.com");
	// Alternativamente pode ser feito da dessa forma
	// driver.navigate().to("http://www.google.com");

	// Encontra o elemento input pelo seu nome
	WebElement element = driver.findElement(By.name("q"));

	// Envia algo a ser pesquisado
	element.sendKeys("Cheese!");

	// Agora envia o form. WebDriver vai encontrar o form para nós pelo element
	element.submit();

	// Confere o título da página
	System.out.println("Page title is: " + driver.getTitle());

	// A pesquisa do Google é renderizada dinâmicamente com Javascript.
	// Espere a página carregar, timeout depois de 10 segundos
	(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
		public Boolean apply(WebDriver d) {
			return d.getTitle().startsWith("cheese!");
		}
	});

	// Deve aparecer: "cheese! - Google Search"
	System.out.println("Page title is: " + driver.getTitle());

	// Fecha o browser
	driver.quit();
}

}[/code] É só rodar. Qualquer coisa avise. Existem truques para esperar até um elemento ser carregado na tela.[/quote]

Tem como pegar o codigo fonte da pagina carregada??!