![]() |
Python - Selenium: Script para localizar portas livres para ChromeDriver |
|
Canal Qb |
Para automatizar múltiplas instâncias do ChromeDriver com Selenium, é importante garantir que cada uma utilize uma porta livre para evitar conflitos. Abaixo, apresentamos um script em Python que encontra uma porta livre disponível no sistema, utilizando a biblioteca socket
.
Função para encontrar porta livre
import socket
def find_free_port():
"""
Encontra uma porta livre para uso do ChromeDriver.
"""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 0)) # Solicita ao SO uma porta livre
port = s.getsockname()[1]
s.close()
return port
# Exemplo de uso
port = find_free_port()
print(f"A porta livre encontrada é {port}")
Essa função cria um socket temporário e pede ao sistema uma porta livre. O sistema escolhe uma porta disponível automaticamente (ao passar 0 no bind). Após recuperar o número da porta, o socket é fechado e o valor retornado pode ser usado para iniciar uma nova instância do ChromeDriver.
Utilizando a função com Selenium
Veja abaixo um exemplo completo demonstrando como usar a função find_free_port
para criar uma instância do ChromeDriver em uma porta livre, configurando opções para execução headless e outras melhorias:
from selenium import webdriver
import socket
def find_free_port():
"""
Encontra uma porta livre para uso do ChromeDriver.
"""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 0))
port = s.getsockname()[1]
s.close()
return port
# Configura as opções do ChromeDriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--headless") # Executa o navegador sem interface gráfica
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
# Encontra uma porta livre
port = find_free_port()
# Cria uma nova instância do ChromeDriver na porta livre encontrada
driver = webdriver.Chrome(options=chrome_options, port=port)
# Use o driver para navegar na web...
driver.get("https://www.google.com")
print(driver.title)
# Encerra o ChromeDriver
driver.quit()
Esse método garante que cada instância do ChromeDriver utilize uma porta exclusiva, evitando erros de conflito quando várias instâncias rodam simultaneamente.
Considerações finais
- Para múltiplas instâncias (exemplo: 20 ou mais), basta chamar a função
find_free_port()
para cada criação de driver, garantindo portas distintas. - Certifique-se de que a versão do ChromeDriver seja compatível com a versão do Google Chrome instalada.
- Este método é recomendado para ambientes que executam testes automatizados em paralelo ou aplicações que necessitam abrir múltiplas janelas do navegador.
Para mais detalhes sobre o Selenium e o ChromeDriver, consulte o site oficial do Selenium e do ChromeDriver.