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…
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.
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;
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.
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();
}
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;
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??!