![]() |
Python - Selenium - Manipulando Timeout no urllib3 | |
Canal Qb |
Configurando Timeout no Selenium e urllib3
Se você estiver usando o Selenium para automatizar interações com páginas web, é fundamental controlar o timeout da sessão para evitar travamentos e otimizar o desempenho. Você pode definir o timeout da sessão Selenium e, em seguida, passá-lo como parâmetro para uma instância do urllib3.PoolManager
, garantindo que as requisições HTTP também respeitem esse limite.
Definindo Timeout na Sessão Selenium
Para definir o timeout da sessão Selenium, utilize o método set_page_load_timeout
do objeto WebDriver
. Por exemplo:
from selenium import webdriver
driver = webdriver.Chrome()
driver.set_page_load_timeout(30) # Define um timeout de 30 segundos para a sessão Selenium
Neste exemplo, configuramos um timeout de 30 segundos para carregamento de páginas na sessão Selenium, prevenindo esperas indefinidas.
Passando Timeout para o urllib3.PoolManager
Ao criar uma instância do urllib3.PoolManager
, você pode passar o timeout definido na sessão Selenium usando o parâmetro timeout
. Assim, as requisições HTTP feitas pelo urllib3
respeitarão o mesmo limite. Veja o exemplo:
import urllib3
http = urllib3.PoolManager(timeout=driver.command_executor._timeout.total_seconds())
response = http.request('GET', 'http://www.example.com/')
Aqui, o valor do timeout é extraído do atributo command_executor._timeout
do objeto WebDriver
, convertido para segundos pelo método total_seconds()
.
Tratando Erro em Versões Antigas do Python
Em versões mais antigas do Python, o método total_seconds()
não está disponível, o que pode gerar o erro:
AttributeError: 'object' object has no attribute 'total_seconds'
Isso acontece porque command_executor._timeout
é um objeto datetime.timedelta
que não possui esse método em versões antigas.
Para contornar isso, extraia o número de segundos diretamente pelo atributo seconds
, como no exemplo abaixo:
import urllib3
from selenium import webdriver
# Inicializa o WebDriver do Selenium
driver = webdriver.Chrome()
driver.set_page_load_timeout(30)
# Define o timeout para o urllib3
timeout_seconds = driver.command_executor._timeout.seconds
http = urllib3.PoolManager(timeout=timeout_seconds)
# Faz uma solicitação HTTP usando o urllib3
response = http.request('GET', 'http://www.example.com/')
Dessa forma, o urllib3
respeita o timeout configurado na sessão Selenium, garantindo coerência nas requisições HTTP.
Considerações Finais
Manter os timeouts bem configurados é essencial para que automações com Selenium e bibliotecas HTTP como o urllib3 funcionem corretamente e não travem ou fiquem aguardando indefinidamente. Além disso, esta integração ajuda a manter os scripts robustos e alinhados com as melhores práticas de automação web.
Para saber mais sobre Selenium, urllib3 e automação web, visite os sites oficiais:
Nota: Sempre realize uma análise cuidadosa antes de aplicar configurações de timeout em seus scripts e testes automatizados para evitar interrupções inesperadas.