Automação com Selenium e HTTP Status:
Verificar Links de uma Página
O Google Adsense recomenda a inclusão de links externos e internos. Criar links é simples, mas precisamos verificar periodicamente se eles estão ativos.
Além disso, automatizar tarefas repetitivas otimiza processos e economiza tempo. O código apresentado acessa páginas da web, coleta links e verifica seus status HTTP. Dessa forma, ele identifica links quebrados e valida a saúde de um site de maneira eficiente.
Primeiramente, usamos o Selenium, para acessar as páginas e extrai os links disponíveis, configuramos o Selenium no modo headless, permitindo sua execução em segundo plano.
Em seguida, a função check_link_status
avalia o status de cada link com a biblioteca requests
. Por meio de uma requisição HTTP do tipo HEAD, ela retorna códigos como 200 (OK) ou 404 (Não Encontrado). Quando ocorre um erro, a função trata a exceção e registra o problema para análise posterior.
Depois de coletar e verificar os links, o código gera um arquivo HTML que exibe os links, seus status e uma imagem representativa do serviço HTTP Cats. Por exemplo, um link com status 200 mostra a imagem correspondente de um gato para esse código.
Além de ser modular, o código permite ajustes e extensões com facilidade. Por isso, você pode adaptá-lo para rastrear várias páginas ou incluir novos indicadores de qualidade dos links. Essa abordagem reduz erros humanos e melhora significativamente a eficiência da análise.
Por fim, automatizar esse processo é essencial em projetos de grande escala. Em vez de realizar uma tarefa tediosa manualmente, ferramentas como Selenium e requests
tornam a verificação de links rápida e prática. Assim, desenvolvedores e administradores de sites podem focar em tarefas mais estratégicas.
Adicione as URLs desejadas na lista pages
no código abaixo e execute o script. O arquivo links_status.html
gerado apresentará os resultados de maneira clara e visual.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager from tqdm import tqdm def check_link_status(link): """ Verifica se um link é válido com base no status HTTP. Retorna o código de status HTTP. """ try: # Faz uma requisição HEAD para obter o status do link response = requests.head(link, allow_redirects=True, timeout=10) return response.status_code except requests.exceptions.RequestException as e: print(f"Erro ao verificar o link: {e}") return "Erro" # Retorna "Erro" em caso de exceção def retorna_links_de_uma_pagina(url, driver): """ Usa Selenium para acessar uma página e retorna todos os links encontrados. """ print(f"Acessando: {url}") try: driver.get(url) # Abre a página no navegador # Captura todas as tags <a> com atributo href links = {a.get_attribute('href') for a in driver.find_elements(By.TAG_NAME, 'a') if a.get_attribute('href')} return links except Exception as e: print(f"Erro ao acessar {url}: {e}") return set() def list_unique_links_selenium(pages): """ Percorre todas as páginas da lista e retorna um conjunto com links únicos. """ # Configurações do Selenium chrome_options = Options() chrome_options.add_argument('--headless') # Executa o navegador em modo headless (sem interface gráfica) chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--no-sandbox') # Inicia o WebDriver driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) unique_links = set() try: for page in pages: links = retorna_links_de_uma_pagina(page, driver) # União entre unique_links e links unique_links = unique_links | links finally: driver.quit() # Fecha o navegador return unique_links def generate_html(links_status): """ Gera um arquivo HTML para exibir os links, seus status HTTP e uma imagem do http.cat. """ html_content = """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Links e Status HTTP</title> <style> table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ccc; padding: 8px; text-align: left; } th { background-color: #f4f4f4; } img { width: 500px; height: auto; } </style> </head> <body> <h1>Links e Status HTTP</h1> <table> <thead> <tr> <th>Link</th> <th>Status HTTP</th> <th>Imagem</th> </tr> </thead> <tbody> """ for link, status in links_status: img_url = f"https://http.cat/{status}" if isinstance(status, int) else "https://http.cat/404" html_content += f""" <tr> <td><a href="{link}" target="_blank">{link}</a></td> <td>{status}</td> <td><img src="{img_url}" alt="HTTP {status}"></td> </tr> """ html_content += """ </tbody> </table> </body> </html> """ # Salvar o HTML em um arquivo with open("links_status.html", "w", encoding="utf-8") as file: file.write(html_content) print("Arquivo HTML gerado: links_status.html") def main(): # Lista de URLs para verificar pages = [ 'https://www.meusite.com.br', ] print("Iniciando scraping das páginas com Selenium...\n") unique_links = list_unique_links_selenium(pages) # Verifica o status HTTP de cada link links_status = [] print("\nVerificando status HTTP dos links encontrados:") for link in tqdm(sorted(unique_links), desc="Verificando links", unit="link"): status = check_link_status(link) links_status.append((link, status)) # Gera o HTML com os links, status e imagens generate_html(links_status) if __name__ == "__main__": main() |