Usando um Proxy no Python com Selenium

Scraping and Proxy Management Expert
Você foi identificado como um bot usando Selenium para web scraping?
Compreensível. Embora o Selenium seja uma ótima ferramenta para raspar páginas da web dinâmicas, ele não consegue funcionar contra defesas anti-bot sofisticadas por conta própria. Você pode adicionar um proxy ao seu raspador Selenium para controlar as limitações de taxa, evitar restrições geográficas e evitar bloqueios de IP.
Selenium Proxy: O que é?
Um proxy serve como um intermediário entre um cliente e um servidor. Ao usá-lo, o cliente contorna as limitações geográficas e envia solicitações anônimas e seguras para outros servidores.
Os servidores proxy podem ser usados por navegadores sem cabeça da mesma forma que os clientes HTTP. Ao acessar sites, um proxy Selenium ajuda a proteger seu endereço IP e contornar bloqueios.
O Selenium com suporte a proxy é muito útil para tarefas de automação do navegador, como raspar sites e testes. Para saber como configurar um proxy no Selenium para web scraping, continue lendo!
Como configurar um proxy Selenium
A linha de código a seguir carrega um driver Chrome sem cabeça e navega para httpbin, um site que fornece o endereço IP do cliente. O script imprime a resposta HTML no final.
language
# pip install selenium webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
# definir opções do Chrome para executar no modo sem cabeça
options = Options()
options.add_argument("--headless=new")
# inicializar o driver Chrome
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=options
)
# navegar para a página da web de destino
driver.get("https://httpbin.io/ip")
# imprimir o HTML da página da web de destino
print(driver.page_source)
# liberar os recursos e fechar o navegador
driver.quit()
O código imprimirá o seguinte HTML:
language
<html><head><meta name="color-scheme" content="light dark"><meta charset="utf-8"></head><body><pre>{
"origin": "50.217.226.40:80"
}
</pre><div class="json-formatter-container"></div></body></html>
No Selenium, para definir um proxy, você deve:
- Obter um servidor proxy confiável
- Entrar no campo
--proxy-server
da opção Chrome - Vá para a página que você deseja visitar.
Primeiro, visite o site Free Proxy List para obter um endereço de proxy gratuito. Configure o Selenium com Opções para que um proxy seja usado para abrir o Chrome. Imprima o texto do corpo da página de destino depois disso.
language
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
# definir o endereço e a porta do proxy
proxy = "20.235.159.154:80"
# definir opções do Chrome para executar no modo sem cabeça usando um proxy
options = Options()
options.add_argument("--headless=new")
options.add_argument(f"--proxy-server={proxy}")
# inicializar o driver Chrome
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=options
)
# navegar para a página da web de destino
driver.get("https://httpbin.io/ip")
# imprimir o conteúdo do corpo da página da web de destino
print(driver.find_element(By.TAG_NAME, "body").text)
# liberar os recursos e fechar o navegador
driver.quit()
Agora, todas as solicitações feitas pela instância controlada do Chrome serão roteados por meio do proxy designado.
O IP do servidor proxy e a resposta do site coincidem. Isso indica que o Selenium está usando o servidor proxy para ver sites.
Autenticação de proxy no Selenium
Alguns servidores proxy utilizam autenticação para impedir que usuários sem credenciais legítimas acessem seus servidores. Esse é geralmente o caso ao usar proxies premium ou soluções comerciais.
A sintaxe Selenium a seguir é para fornecer um nome de usuário e senha em um URL de proxy autenticado:
language
<PROXY_PROTOCOL>://<YOUR_USERNAME>:<YOUR_PASSWORD>@<PROXY_IP_ADDRESS>:<PROXY_PORT>
No entanto, como o driver Chrome ignora o nome de usuário e senha por padrão, inserir um URL em --proxy-server
não funcionará. Um plugin de terceiros como Selenium Wire pode ajudar nessa situação.
Com a ajuda do Selenium Wire, você pode modificar as solicitações do navegador da maneira que desejar e ter acesso às próprias solicitações. Para instalá-lo, use o comando mostrado abaixo:
language
pip install blinker==1.7.0 selenium-wire
Para lidar com a autenticação de proxy, use Selenium Wire, como demonstrado abaixo:
language
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
# configurar o proxy
proxy_username = "<YOUR_USERNAME>"
proxy_password = "<YOUR_PASSWORD>"
proxy_address = "20.235.159.154"
proxy_port = "80"
# formular o URL do proxy com autenticação
proxy_url = f"http://{proxy_username}:{proxy_password}@{proxy_address}:{proxy_port}"
# define as opções do selenium-wire para usar o proxy
seleniumwire_options = {
"proxy": {
"http": proxy_url,
"https": proxy_url
},
}
# define as opções do Chrome para rodar em modo headless
options = Options()
options.add_argument("--headless=new")
# inicializa o driver do Chrome com o serviço, as opções do selenium-wire e as opções do Chrome
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
seleniumwire_options=seleniumwire_options,
options=options
)
# navega para a página da web alvo
driver.get("https://httpbin.io/ip")
# imprime o conteúdo do corpo da página da web alvo
print(driver.find_element(By.TAG_NAME, "body").text)
# libera os recursos e fecha o navegador
driver.quit()
Está cansado de bloqueios contínuos de scraping da web?
Scrapeless: a melhor solução de scraping online tudo-em-um disponível!
Mantenha o anonimato e evite banimentos baseados em IP com nossa rotação inteligente de proxy de alto desempenho:
Experimente grátis!
Os melhores protocolos de proxy de selénio
As alternativas mais populares para a seleção de um protocolo para um proxy de Selénio são HTTP, HTTPS e SOCKS5.
Os proxies HTTPS acrescentam um grau de segurança adicional, encriptando os dados que transferem pela Internet, em contraste com as proxies HTTP. Este último é, portanto, mais favorecido e seguro.
SoCKS5, ou SOCKS, é outro protocolo útil para os proxies Selenium. É um protocolo mais flexível, pois pode lidar com uma maior variedade de tráfego online, como protocolos de e-mail e transferência de ficheiros.
Todas as coisas consideradas, a raspagem web e o rastreio beneficiam muito dos proxies HTTP e HTTPS, enquanto as funções de tráfego não HTTP são adequadas para SOCKS.
Utilize um proxy rotativo em Python para o Selénio
Se o seu script enviar várias consultas num pequeno período de tempo, o servidor poderá sinalizar-a como suspeito e proibir o seu IP. Tem menos sucesso raspar dados quando tenta utilizar endereços IP específicos, uma vez que os sites podem identificar e bloquear os pedidos desses endereços.
No entanto, esta questão pode ser resolvida empregando uma estratégia de procuração rotativa. Após um determinado período de tempo ou pedidos, o seu IP final irá alterar-se continuamente como resultado da mudança de proxies. Isto impede que seja banido pelo servidor, fazendo com que pareça um utilizador distinto de cada vez.
Vejamos como utilizar o fio selénio para criar um rotador de proxy em Selenium.
É necessário primeiro estabelecer um pool de proxy. Faremos uso de vários proxies gratuitos neste exemplo.
Como se segue, coloque-os num array:
language
PROXIES = [
"http://19.151.94.248:88",
"http://149.169.197.151:80",
# ...
"http://212.76.118.242:97"
]
Em seguida, utilize aleatório.choice() para extrair um proxy aleatório, que pode utilizar para iniciar uma nova instância do driver. É assim que o seu código final deve aparecer:
language
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import random
# a lista de proxy para rotacionar
PROXIES = [
"http://20.235.159.154:80",
"http://149.169.197.151:80",
# ...
"http://212.76.118.242:97"
]
# selecione um proxy aleatório
proxy = random.choice(PROXIES)
# define as opções do selenium-wire para usar o proxy
seleniumwire_options = {
"proxy": {
"http": proxy,
"https": proxy
},
}
# define as opções do Chrome para rodar em modo headless
options = Options()
options.add_argument("--headless=new")
# inicializa o driver do Chrome com o serviço, as opções do selenium-wire e as opções do Chrome
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
seleniumwire_options=seleniumwire_options,
options=options
)
# navega para a página da web alvo
driver.get("https://httpbin.io/ip")
# imprime o conteúdo do corpo da página da web alvo
print(driver.find_element(By.TAG_NAME, "body").text)
# libera os recursos e fecha o navegador
driver.quit()
Na verdade, a utilização de proxies livres resultará normalmente no bloqueio. Embora os tenhamos utilizado para ilustrar os fundamentos, nunca deve depender deles para um projeto prático.
Erro de Selenium Grid 403: Proxy é proibido
A execução paralela dos scripts cruzados e do controlo remoto do navegador é possível utilizando o Selenium Grid. No entanto, se o utilizar, pode receber um dos problemas mais frequentes durante a raspagem da web: Erro 403: Peguei para Proxy
. Existem duas razões pelas quais isso ocorre:
- A porta 4444 já está em uso por outro processo.
- O URL certo não está a ser recebido pelos seus pedidos de RemoteWebDriver.
Certifique-se de que está a ligar o driver remoto ao URL do hub correto, conforme indicado abaixo, se não resolver o problema:
language
import selenium.webdriver as webdriver
# ...
webdriver.Remote('http://localhost:4444/wd/hub', {})
Conclusão
Servidores proxy podem ajudar a contornar sistemas de detecção anti-bot, mas precisam de muita manutenção humana e nem sempre são confiáveis. Use uma API de web scraping, como Scrapeless, para contornar de forma confiável quaisquer medidas anti-bot e poupe-se do trabalho de localizar e configurar proxies. Obtenha uma versão de teste gratuita do Scrapeless!
Na Scrapeless, acessamos apenas dados disponíveis publicamente, cumprindo rigorosamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve quaisquer atividades ilegais ou infratoras. Não oferecemos garantias e nos isentamos de qualquer responsabilidade pelo uso de informações deste blog ou de links de terceiros. Antes de se envolver em qualquer atividade de scraping, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.