Propaganda

O rastreamento da Web é extremamente útil para automatizar certas tarefas realizadas rotineiramente em sites. Você pode escrever um rastreador para interagir com um site da mesma forma que um ser humano faria.

No um artigo anterior Como construir um rastreador básico da web para obter informações de um siteSempre quis capturar informações de um site? Veja como escrever um rastreador para navegar em um site e extrair o que você precisa. consulte Mais informação , cobrimos o básico para escrever um webcrawler O que é Web Scraping? Como coletar dados de sitesJá se viu perdendo um tempo valioso lendo dados em páginas da web? Veja como encontrar os dados desejados com web scraping. consulte Mais informação usando o módulo python, scrapy. A limitação dessa abordagem é que o rastreador não oferece suporte a javascript. Ele não funcionará corretamente com os sites que usam muito o javascript para gerenciar a interface do usuário. Para tais situações, você pode escrever um rastreador que usa o Google Chrome e, portanto, pode lidar com javascript como um navegador Chrome normal dirigido pelo usuário.

instagram viewer

Automatizar o Google Chrome envolve o uso de uma ferramenta chamada Selênio. É um componente de software que fica entre o seu programa e o navegador e o ajuda a conduzir o navegador por meio do programa. Neste artigo, conduzimos você por todo o processo de automação do Google Chrome. As etapas geralmente incluem:

  • Configurando o Selenium
  • Usando o Inspetor do Google Chrome para identificar seções da página da web
  • Escrevendo um programa java para automatizar o Google Chrome

Para o propósito do artigo, vamos investigar como ler o Google Mail em java. Embora o Google forneça uma API (Application Programming Interface) para ler e-mails, neste artigo usamos o Selenium para interagir com o Google Mail para demonstrar o processo. O Google Mail faz uso intenso de javascript e, portanto, é um bom candidato para aprender Selenium.

Configurando Selênio

Driver da Web

Conforme explicado acima, Selênio consiste em um componente de software que é executado como um processo separado e executa ações em nome do programa java. Este componente é chamado Driver da Web e deve ser baixado para o seu computador.

Clique aqui para acessar o site de download do Selenium, clique na versão mais recente e baixe o arquivo apropriado para o sistema operacional do seu computador (Windows, Linux ou MacOS). É um arquivo ZIP contendo chromedriver.exe. Extraia-o para um local adequado, como C: \ WebDrivers \ chromedriver.exe. Usaremos este local posteriormente no programa java.

Módulos Java

A próxima etapa é configurar os módulos java necessários para usar o Selenium. Supondo que você esteja usando Maven para construir o programa java, adicione a seguinte dependência ao seu POM.xml.

org.seleniumhq.seleniumselênio-java3.8.1

Quando você executa o processo de construção, todos os módulos necessários devem ser baixados e configurados em seu computador.

Selênio Primeiros Passos

Vamos começar com o Selenium. A primeira etapa é criar um ChromeDriver instância:

Driver WebDriver = novo ChromeDriver (); 

Isso deve abrir uma janela do Google Chrome. Deixe-nos navegar para a página de pesquisa do Google.

driver.get (" http://www.google.com"); 

Obtenha uma referência ao elemento de entrada de texto para que possamos realizar uma pesquisa. O elemento de entrada de texto tem o nome q. Localizamos os elementos HTML na página usando o método WebDriver.findElement ().

Elemento WebElement = driver.findElement (By.name ("q")); 

Você pode enviar texto para qualquer elemento usando o método sendKeys (). Vamos enviar um termo de pesquisa e terminá-lo com uma nova linha para que a pesquisa comece imediatamente.

element.sendKeys ("terminador \ n"); 

Agora que uma pesquisa está em andamento, precisamos aguardar a página de resultados. Podemos fazer isso da seguinte maneira:

novo WebDriverWait (driver, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("terminator")); 

Este código basicamente diz ao Selenium para esperar 10 segundos e retornar quando o título da página começar com o Exterminador do Futuro. Usamos uma função lambda para especificar a condição a aguardar.

Agora podemos obter o título da página.

System.out.println ("Título:" + driver.getTitle ()); 

Assim que terminar a sessão, a janela do navegador pode ser fechada com:

driver.quit (); 

E isso, pessoal, é uma sessão de navegador simples controlada usando java via selenium. Parece bastante simples, mas permite que você programe muitas coisas que normalmente você teria que fazer manualmente.

Usando o Inspetor do Google Chrome

Inspetor do Google Chrome Descobrir problemas de site com ferramentas de desenvolvedor do Chrome ou FirebugSe você tem seguido meus tutoriais de jQuery até agora, talvez já tenha se deparado com alguns problemas de código e não saiba como corrigi-los. Quando confrontado com um pedaço de código não funcional, é muito ... consulte Mais informação é uma ferramenta inestimável para identificar os elementos a serem usados ​​com o Selenium. Ele nos permite direcionar o elemento exato de java para extrair informações, bem como uma ação interativa, como clicar em um botão. Aqui está uma introdução sobre como usar o Inspetor.

Abra o Google Chrome e navegue até uma página, digamos a página IMDb para Liga da Justiça (2017).

Vamos encontrar o elemento que deseja atingir, digamos, o resumo do filme. Clique com o botão direito no resumo e selecione “Inspecionar” no menu pop-up.

como fazer um rastreador da web com selênio

Na guia “Elementos”, podemos ver que o texto do resumo é um div com uma classe de resumo_texto.

como fazer um rastreador da web com selênio

Usando CSS ou XPath para Seleção

Selenium suporta a seleção de elementos da página usando CSS. (O dialeto CSS suportado é CSS2). Por exemplo, para selecionar o texto de resumo da página IMDb acima, escreveríamos:

WebElement summaryEl = driver.findElement (By.cssSelector ("div.summary_text")); 

Você também pode usar XPath para selecionar elementos de uma maneira muito semelhante (Vá aqui para as especificações). Novamente, para selecionar o texto do resumo, faríamos:

WebElement summaryEl = driver.findElement (By.xpath ("// div [@ class = 'summary_text']")); 

XPath e CSS têm recursos semelhantes para que você possa usar qualquer um com o qual se sinta confortável.

Lendo Google Mail de Java

Vejamos agora um exemplo mais complexo: obtenção do Google Mail.

Inicie o driver do Chrome, navegue até gmail.com e espere até que a página seja carregada.

Driver WebDriver = novo ChromeDriver (); driver.get (" https://gmail.com"); novo WebDriverWait (driver, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("gmail")); 

Em seguida, procure o campo de e-mail (é nomeado com o id identifierId) e insira o endereço de e-mail. Clique no Próximo botão e aguarde a página de senha carregar.

/ * Digite o nome de usuário / email * / {driver.findElement (By.cssSelector ("# identifierId")). sendKeys (email); driver.findElement (By.cssSelector (". RveJvd")). click (); } novo WebDriverWait (driver, 10) .até (d ->! d.findElements (By.xpath ("// div [@ id = 'senha']")). isEmpty ());

Agora, vamos inserir a senha, clique no Próximo botão novamente e aguarde o carregamento da página do Gmail.

/ * Digite a senha * / {driver .findElement (By.xpath ("// div [@ id = 'senha'] // input [@ type = 'senha']")) .sendKeys (senha); driver.findElement (By.cssSelector (". RveJvd")). click (); } novo WebDriverWait (driver, 10) .até (d ->! d.findElements (By.xpath ("// div [@ class = 'Cp']")). isEmpty ());

Busque a lista de linhas de e-mail e faça um loop em cada entrada.

Listarows = driver .findElements (By.xpath ("// div [@ class = 'Cp'] // table / tbody / tr")); para (WebElement tr: linhas) { }

Para cada entrada, busque o A partir de campo. Observe que algumas entradas De podem ter vários elementos, dependendo do número de pessoas na conversa.

{/ * From Element * / System.out.println ("From:"); for (WebElement e: tr .findElements (By.xpath (".// div [@ class = 'yW'] / *"))) {System.out.println ("" + e.getAttribute ("email") + "," + e.getAttribute ("nome") + "," + e.getText ()); } }

Agora, pegue o assunto.

{/ * Assunto * / System.out.println ("Sub:" + tr.findElement (By.xpath (".// div [@ class = 'yNN']")). GetText ()); }

E a data e hora da mensagem.

{/ * Data / Hora * / WebElement dt = tr.findElement (By.xpath ("./ td [8] / *")); System.out.println ("Date:" + dt.getAttribute ("title") + "," + dt.getText ()); }

Aqui está o número total de linhas de e-mail na página.

System.out.println (rows.size () + "mails."); 

E, finalmente, terminamos, então fechamos o navegador.

driver.quit (); 

Para recapitular, você pode usar o Selenium com o Google Chrome para rastrear os sites que usam muito JavaScript. E com o Inspetor do Google Chrome, é muito fácil descobrir o CSS ou XPath necessário para extrair ou interagir com um elemento.

Você tem algum projeto que se beneficia do uso do Selenium? E que problemas você está enfrentando com isso? Descreva nos comentários abaixo.