Aula 5 - Selenium e BeautifulSoup

Webdrivers

Selenium

  • Instalação do Selenium:

    pip install selenium
    
  • Importação da biblioteca:

    from selenium import webdriver
    
  • Chamar navegadores com o(s) webdriver(s):

    #Google Chrome
    driver = webdriver.Chrome('chromedriver.exe')
    
    #Mozilla Firefox
    driver = webdriver.Firefox('geckodriver.exe')
    
    #Internet Explorer
    driver = webdriver.Ie('IEDriverServer.exe')
    
  • Maximizar a janela do navegador:

    driver.maximize_window()
    
  • Colocar um tempo para carregamento - IMPLÍCITO:

    driver.implicitly_wait(30)
    
  • Colocar um tempo para carregamento - EXPLÍCITO:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, 'twotabsearchtextbox')))
    
  • Acessar um site:

    driver.get('https://www.amazon.com.br/')
    
  • Buscar elementos na página:

    #Buscar pela class do elemento
    driver.find_element_by_class_name('nav-input.nav-progressive-attribute')
    
    #Buscar pelo id do elemento
    driver.find_element_by_id('twotabsearchtextbox')
    
    #Buscar pela tag do elemento
    driver.find_element_by_tag_name('h1')
    
    #Buscar pelo xpath do elemento
    driver.find_element_by_xpath('//input[@id="twotabsearchtextbox"]')
    
    #Buscar pelo texto completo do elemento:
    driver.find_element_by_link_text('Todos')
    
    #Buscar pelo texto parcial do elemento:
    driver.find_element_by_partial_link_text('endereço').click()
    
    #Buscar pelo seletor CSS:
    driver.find_element_by_css_selector('#searchDropdownBox')
    driver.find_element_by_css_selector('[name=url]')
    driver.find_element_by_css_selector('.nav-search-dropdown.searchSelect.nav-progressive-attrubute.nav-progressive-search-dropdown')
    
  • Digita um valor no site:

    driver.find_element_by_id('twotabsearchtextbox').send_keys('Python')
    
  • Apagar um campo escrito:

    driver.find_element_by_id('twotabsearchtextbox').clear()
    
  • Clicar em um elemento:

    driver.find_element_by_id('nav-search-submit-button').click()
    
  • Movimentar a tela para um elemento (scroll):

    driver.find_element_by_class_name('navFooterBackToTopText').location_once_scrolled_into_view
    
  • Extrair texto:

    driver.find_element_by_id('glow-ingress-line2').text
    
  • Coletar atributos do HTML:

    driver.find_element_by_id('nav-logo-sprites').get_attribute('aria-label')
    
  • Tirar print de um elemento ou do site:

    #Print do elemento
    driver.find_element_by_id('navbar').screenshot('menu.png')
    
    #Print do site
    driver.save_screenshot("screenshot.png")
    
  • Selecionar uma opção no Dropdown:

    from selenium.webdriver.support.ui import Select
    
    dropdown = Select(driver.find_element_by_id('searchDropdownBox'))
    
    #Selecionar pelo texto presente
    dropdown.select_by_visible_text('Computadores e Informática')
    
    #Selecionar pelo atributo value do HTML
    dropdown.select_by_value('search-alias=computers')
    
    #Selecionar pelo número dele na lista
    dropdown.select_by_index(11)
    
  • Fechar aba do navegador:

    driver.close()
    
  • Fechar navegador e seu webdriver:

    driver.quit()
    

BeautifulSoup

  • Importar biblioteca para "baixar" o HTML da página:

    from urllib.request import urlopen
    
  • Efetuar requisição da página HTML:

    html = urlopen('https://quotes.toscrape.com/')
    
  • Resolvendo problema de certificado SSL (se houver):

    ```python
    import ssl
    
    ssl._create_default_https_context = ssl._create_unverified_context
    ```
    
    pip install beautifulsoup4
    
  • Importar biblioteca do “parser” de HTML:

    from bs4 import BeautifulSoup
    
  • Formatar o código de HTML para “parsear”:

    soup = BeautifulSoup(html.read(), 'html.parser')
    
  • ALTERNATIVA de biblioteca para "baixar" o html da página:

  • Instalação da "lib":

    ```bash
    pip install requests
    ```
    
  • Importação da “lib”:

    ```python
    import requests
    ```
    
  • Efetuar requisição da página HTML:

    ```python
    html = requests.get('https://quotes.toscrape.com/')
    ```
    
  • Formatar o código de HTML para “parsear”:

    ```python
    soup = BeautifulSoup(html.text, 'html.parser')
    ```
    
  • Acessar uma TAG diretamente:

    soup.h1
    
    # output:
    # <h1>
    # <a href="/" style="text-decoration: none">Quotes to Scrape</a>
    # </h1>
    
  • Acessar o PRIMEIRO elemento através dos seus atributos básicos (ID ou CLASS):

    soup.find(class_='text')
    
    # output:
    # <span class="text" itemprop="text">“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”</span>
    
  • Buscar algum elemento através do seu texto (entre as TAGS):

    soup.find(text="deep-thoughts")
    
    # output: 'deep-thoughts'
    
  • Buscar mais de um elemento na página:

    soup.find_all(class_='text')
    
    # ou
    
    soup.find_all('span', {'class': 'text'})
    
    # output: [<span class="text" itemprop="text">“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”</span>, <span class="text" itemprop="text">“It is our choices, Harry, that show what we truly are, far more than our abilities.”</span>, ... ]
    
  • Ver atributos da TAG de HTML:

    div = soup.find('div', {'class': 'quote'})
    div.attrs
    
    # output: {'class': ['quote'], 'itemscope': '', 'itemtype': 'http://schema.org/CreativeWork'}
    
  • Pegar atributos da TAG de HTML:

    soup.find('div', {'class': 'quote'}).get('itemtype')
    
    # output: 'http://schema.org/CreativeWork'
    

Xpath

032816_0758_XPathinSele1.png

CSS Selector:

Extras