SlideShare uma empresa Scribd logo
1 de 88
Baixar para ler offline
@pokemaobr
WebScrapping com
Selenium Webdriver
Rodrigo 'Pokemaobr' Cardoso
Bacharel em Matemática Aplicada e Computacional pela UFRRJ
MBA em Engenharia de Softwares Orientado para Serviços pelo IBTA
Apresentador @ The Velopers
Evangelista @ PHPSP
Criador do canal de youtube PokePHP
@pokemaobr - rodrigo.cardoso@imasters.com.br
@pokemaobr
O problema?
Sistema de Inscrição
Não tinha API
Daí tinha ingresso
free...
Cadastrar 500
pessoas na mão?
Acho melhor não né!
Pesquisando
soluções...
No início era o verbo...
cURL
PHP >= 4.0.2
Exemplo de Utilização
Prós
Prós
É nativo, basta habilitar a extensão
Prós
Sintaxe simples
Prós
Existe várias opções para os vários
tipos ações (POST, GET, COOKIES,
etc)
Contras
Contras
Uma chamada por URL,
“continuidade” só possível através
de COOKIES
Contras
Tem que se “desenhar” um form
específico do site.
Contras
Não “roda” javascript
Contras
Utilização de bibliotecas externas
para “parsear” o html
Não resolveu o
problema...
Alternativas ao CURL
file_get_contents ( bem similar ao
CURL, utilizando o conceito de
STREAMS, menos código para GET)
Alternativas ao CURL
GuzzleHTTP ( biblioteca que facilita
a realização de chamadas HTTP,
utiliza o cURL em seu core )
Aí fui ver o que
poderia me
salvar...
Selenium
Selenium
Motor para automação de browsers.
Selenium
É exatamente o browser.
Selenium
Utilizado para testes funcionais.
Selenium
É em JAVA.
Como posso
instalar isso aí?
Selenium - Instalação
Ter o último JAVA instalado.
Selenium - Instalação
Baixar o .jar
http://www.seleniumhq.org/downl
oad/
e rodar no terminal.
Selenium - Instalação
Precisa de um “driver” para cada
navegador.
Selenium - Instalação
Colocar o caminho dos “drivers” na
path do SO ou na pasta onde está o
client do Selenium.
Se é em JAVA com
funciona em PHP?
Facebook Webdriver
https://github.com/facebook/php-
webdriver
Facebook Webdriver
Abstração do Selenium utilizando
PHP.
Facebook Webdriver
Fácil sintaxe.
Facebook Webdriver
Fácil execução.
Facebook Webdriver
Você pode interagir com o browser e
capturar dados do browser.
Como começar?
Facebook Webdriver
“Rodar” o client
Facebook Webdriver
Dai é só dar o composer require
facebook/webdriver
Facebook Webdriver
Já no seu código PHP...
Facebook Webdriver
Autoload...
Facebook Webdriver
“Definir” o host...
Facebook Webdriver
“Definir” o driver...
Facebook Webdriver
Mandar o get na URL...
<?php
require_once 'vendor/autoload.php';
use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverRemoteDesiredCapabilities;
$host = 'http://localhost:4444/wd/hub';
$driver = RemoteWebDriver::create($host,
DesiredCapabilities::chrome());
$driver->get('https://phpeste.net');
Facebook Webdriver
E ver a mágica acontecer!
Facebook Webdriver
Você pode “ler” ou “preencher” os
dados por: id, name, className,
linkText, CssSelector, tagName,
xPath...
$icon = $driver-
>findElement(WebDriverBy::className('classe'));
Facebook Webdriver
E se a gente quisesse clicar para
comprar um ingresso?
Facebook Webdriver
Dá um “inspecionar” onde você quer
clicar e vê o HTML
Facebook Webdriver
Fomos trollados, pq não tem id, nem
name, a classe é usada nos 2 botões,
ou seja ferrou muito...
Facebook Webdriver
Mas podemos tentar pegar por
exemplo pela classe “btn-primary” e
pegar o primeiro elemento?
Facebook Webdriver
Daí é só colocar mais um use e outra
linha loka. E depois é só clicar...
use FacebookWebDriverWebDriverBy;
$links = $driver-
>findElements(WebDriverBy::className('btn-
primary'));
$links[0]->click();
Facebook Webdriver
Oia, funcionou...
Facebook Webdriver
E se quiséssemos pegar o nome de
palestrantes na programação?
Facebook Webdriver
E se quiséssemos pegar o nome de
palestrantes na programação?
Facebook Webdriver
Denovo vamos “inspecionar”
Facebook Webdriver
Fomos trollados novamente...
Facebook Webdriver
Vamos tentar com a tag “h5”
Facebook Webdriver
Parece que deu bom… Agora é só
pedir só o texto que dá bom!
Facebook Webdriver
Deu bom, como ficou o código?
<?php
require_once 'vendor/autoload.php';
use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverRemoteDesiredCapabilities;
use FacebookWebDriverWebDriverBy;
$host = 'http://localhost:4444/wd/hub';
$driver = RemoteWebDriver::create($host,
DesiredCapabilities::chrome());
$driver->get('https://phpeste.net/programming/');
$speakers = $driver->findElements(WebDriverBy::tagName('h5'));
foreach ($speakers as $speaker) {
echo $speaker->getText() . PHP_EOL;
}
Facebook Webdriver
E se a gente quisesse fazer uma
pesquisa no google?
Facebook Webdriver
Dá um “inspecionar” onde você quer
clicar e vê o HTML
Facebook Webdriver
Dai é só “enviar” as “teclas” para o
elemento na classe...
Facebook Webdriver
E o código?
<?php
require_once 'vendor/autoload.php';
use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverRemoteDesiredCapabilities;
use FacebookWebDriverWebDriverBy;
$host = 'http://localhost:4444/wd/hub';
$driver = RemoteWebDriver::create($host,
DesiredCapabilities::chrome());
$driver->get('https://google.com.br/');
$driver->findElement(WebDriverBy::className('gLFyf'))
->sendKeys('Pokemaobr');
Facebook Webdriver
Mas será que funciona de verdade?
Facebook Webdriver
Bem, isso aí é só pra começar…
Agora é com vocês...
Rodrigo 'Pokemaobr' Cardoso
Apresentador @ The Velopers
@pokemaobr
contato@pokemaobr.dev
@pokemaobr
Dúvidas?

Mais conteúdo relacionado

Semelhante a WebScrapping com Selenium Webdriver

PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...Rafael Jaques
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
Python mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetPython mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetMarcos Petry
 
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel PetryPython mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web - Marcos Daniel PetryTchelinux
 
Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Jonata Weber
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php segurosDouglas V. Pasqua
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 
Clean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalClean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalLeo Baiano
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkRafael Dohms
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPaulino Michelazzo
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web HackingConviso Application Security
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkMarcelo Rodrigo
 

Semelhante a WebScrapping com Selenium Webdriver (20)

PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
Python mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetPython mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internet
 
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel PetryPython mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
J query
J queryJ query
J query
 
Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Python 08
Python 08Python 08
Python 08
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 
Clean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalClean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissional
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao Framework
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 

Mais de Rodrigo Wanderley de Melo Cardoso

Palestrar.dev - Disseminando seu conhecimento em desenvolvimento
Palestrar.dev - Disseminando seu conhecimento em desenvolvimentoPalestrar.dev - Disseminando seu conhecimento em desenvolvimento
Palestrar.dev - Disseminando seu conhecimento em desenvolvimentoRodrigo Wanderley de Melo Cardoso
 
O ecossistema e o estado atual do php - o presente, o passado e o futuro da ...
O ecossistema e o estado atual do php  - o presente, o passado e o futuro da ...O ecossistema e o estado atual do php  - o presente, o passado e o futuro da ...
O ecossistema e o estado atual do php - o presente, o passado e o futuro da ...Rodrigo Wanderley de Melo Cardoso
 
Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...
Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...
Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...Rodrigo Wanderley de Melo Cardoso
 
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...Rodrigo Wanderley de Melo Cardoso
 
Linguagens de Programação para Ficar de Olho em 2019 - DevRocks
Linguagens de Programação para Ficar de Olho em 2019 - DevRocksLinguagens de Programação para Ficar de Olho em 2019 - DevRocks
Linguagens de Programação para Ficar de Olho em 2019 - DevRocksRodrigo Wanderley de Melo Cardoso
 
Resolvendo problemas de inteligência artificial e reconhecimento óptico com php
Resolvendo problemas de inteligência artificial e reconhecimento óptico com phpResolvendo problemas de inteligência artificial e reconhecimento óptico com php
Resolvendo problemas de inteligência artificial e reconhecimento óptico com phpRodrigo Wanderley de Melo Cardoso
 
Como contribuir para a comunidade de desenvolvedores pode ser bom para minha ...
Como contribuir para a comunidade de desenvolvedores pode ser bom para minha ...Como contribuir para a comunidade de desenvolvedores pode ser bom para minha ...
Como contribuir para a comunidade de desenvolvedores pode ser bom para minha ...Rodrigo Wanderley de Melo Cardoso
 
DrupalCamp campinas 2016 - Como contribuir para a comunidade poder ser bom pa...
DrupalCamp campinas 2016 - Como contribuir para a comunidade poder ser bom pa...DrupalCamp campinas 2016 - Como contribuir para a comunidade poder ser bom pa...
DrupalCamp campinas 2016 - Como contribuir para a comunidade poder ser bom pa...Rodrigo Wanderley de Melo Cardoso
 
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...Rodrigo Wanderley de Melo Cardoso
 

Mais de Rodrigo Wanderley de Melo Cardoso (20)

Desenvolvendo chatbots para suas lives
Desenvolvendo chatbots para suas livesDesenvolvendo chatbots para suas lives
Desenvolvendo chatbots para suas lives
 
Palestrar.dev - Disseminando seu conhecimento em desenvolvimento
Palestrar.dev - Disseminando seu conhecimento em desenvolvimentoPalestrar.dev - Disseminando seu conhecimento em desenvolvimento
Palestrar.dev - Disseminando seu conhecimento em desenvolvimento
 
Masterizando a Curadoria de Eventos.pdf
Masterizando a Curadoria de Eventos.pdfMasterizando a Curadoria de Eventos.pdf
Masterizando a Curadoria de Eventos.pdf
 
Onde posso ir como “dev”
Onde posso ir como “dev”Onde posso ir como “dev”
Onde posso ir como “dev”
 
Ferramentas (Devs ou Não) para te ajudar 2021
Ferramentas (Devs ou Não) para te ajudar 2021Ferramentas (Devs ou Não) para te ajudar 2021
Ferramentas (Devs ou Não) para te ajudar 2021
 
Como fazer dinheiro com ti
Como fazer dinheiro com tiComo fazer dinheiro com ti
Como fazer dinheiro com ti
 
O ecossistema e o estado atual do php - o presente, o passado e o futuro da ...
O ecossistema e o estado atual do php  - o presente, o passado e o futuro da ...O ecossistema e o estado atual do php  - o presente, o passado e o futuro da ...
O ecossistema e o estado atual do php - o presente, o passado e o futuro da ...
 
Em busca do elixir do desenvolvimento
Em busca do elixir do desenvolvimentoEm busca do elixir do desenvolvimento
Em busca do elixir do desenvolvimento
 
Desenvolvendo chatbots mesmo sem saber codar!
Desenvolvendo chatbots mesmo sem saber codar! Desenvolvendo chatbots mesmo sem saber codar!
Desenvolvendo chatbots mesmo sem saber codar!
 
Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...
Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...
Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...
 
Function as a Service no OpenFaaS com Docker e PHP
Function as a Service no OpenFaaS com Docker e PHPFunction as a Service no OpenFaaS com Docker e PHP
Function as a Service no OpenFaaS com Docker e PHP
 
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
 
Linguagens de Programação para Ficar de Olho em 2019 - DevRocks
Linguagens de Programação para Ficar de Olho em 2019 - DevRocksLinguagens de Programação para Ficar de Olho em 2019 - DevRocks
Linguagens de Programação para Ficar de Olho em 2019 - DevRocks
 
Desenvolvendo chatbots mesmo sem saber codar!
Desenvolvendo chatbots mesmo sem saber codar!Desenvolvendo chatbots mesmo sem saber codar!
Desenvolvendo chatbots mesmo sem saber codar!
 
Resolvendo problemas de inteligência artificial e reconhecimento óptico com php
Resolvendo problemas de inteligência artificial e reconhecimento óptico com phpResolvendo problemas de inteligência artificial e reconhecimento óptico com php
Resolvendo problemas de inteligência artificial e reconhecimento óptico com php
 
Criando sua stack de deploy php com git, jenkins e ansible
Criando sua stack de deploy php com git, jenkins e ansibleCriando sua stack de deploy php com git, jenkins e ansible
Criando sua stack de deploy php com git, jenkins e ansible
 
Como contribuir para a comunidade de desenvolvedores pode ser bom para minha ...
Como contribuir para a comunidade de desenvolvedores pode ser bom para minha ...Como contribuir para a comunidade de desenvolvedores pode ser bom para minha ...
Como contribuir para a comunidade de desenvolvedores pode ser bom para minha ...
 
DrupalCamp campinas 2016 - Como contribuir para a comunidade poder ser bom pa...
DrupalCamp campinas 2016 - Como contribuir para a comunidade poder ser bom pa...DrupalCamp campinas 2016 - Como contribuir para a comunidade poder ser bom pa...
DrupalCamp campinas 2016 - Como contribuir para a comunidade poder ser bom pa...
 
Php Experience 2016 - Mercado de Trabalho para Elefantes
Php Experience 2016 - Mercado de Trabalho para ElefantesPhp Experience 2016 - Mercado de Trabalho para Elefantes
Php Experience 2016 - Mercado de Trabalho para Elefantes
 
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
 

WebScrapping com Selenium Webdriver

Notas do Editor

  1. Cada projeto estava em uma pasta diferente, algumas no var/www, outras em pastas do usuário