Este blog é um complemento do nosso canal no YouTube. Clique em @CanalQb para seguir e acompanhar nossos vídeos!

Sugestões de pesquisas

Manipulando Timeout no Selenium com urllib3 em Python

#Python; #Selenium; #urllib3
@CanalQb 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.

إرسال تعليق

Comente só assim vamos crescer juntos!
CanalQb mais próximo Quer falar com o CanalQb?
Em que posso te ajudar?
Fale comigo