/*
* 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();
}}
Pegar código fonte da pagina usando o web browser do eclipse (ECLIPSE.SWT)
9 Respostas
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.
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.5.0</version>
</dependency>
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();
}
}
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?
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?
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 ?
oi mateusviccari,Está usando o Eclipse? Tem o Maven instalado? (me diz que sim)
Vá em New >> Other >> Maven >> Maven Project
No pom.xml, insira isso dentro das dependencies:
Crie um projeto simples, preencha o resto das informações e espere o projeto ser criado.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) :<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.5.0</version> </dependency>É só rodar. Qualquer coisa avise. Existem truques para esperar até um elemento ser carregado na tela.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(); } }
Tem como pegar o codigo fonte da pagina carregada??!