Skip to main content

antiblock-selenium

Chrome e Firefox selenium webdrivers com alguns mecanismos antibloqueios.

Recursos

  • Rotação de IPs via Tor
  • Rotação de user-agents (Apenas para Firefox)
  • Delays aleatórios ou fixos entre requisições
  • Persistência e carregamento de cookies
    • Permite salvar informações de login, por exemplo

Instalação

A maneira mais simples:

pip install antiblock-selenium

Configurando Tor

É necessário configurar o Tor. Primeiramente, instale-o:

sudo apt-get install tor

Pare sua execução para realizar configurações:

sudo service tor stop

Abra seu arquivo de configuração como root, disponível em /etc/tor/torrc, por exemplo, usando o nano:

sudo nano /etc/tor/torrc

Coloque as linhas abaixo e salve:

ControlPort 9051
CookieAuthentication 0

Reinicie o Tor:

sudo service tor start

Uso

As classes Firefox e Chrome de antiblock_selenium herdam de selenium.webdriver.Firefox e selenium.webdriver.Chrome, respectivamente. Então as use como habitualmente.

Uso básico

from antiblock_selenium import Firefox, Chrome

chrome = Chrome()
firefox = Firefox()

#use os drivers como habitualmente faz com webdrivers

As funcionalidades extras a estes webdrivers são listadas abaixo.

Rotacionar IPs via Tor

Parâmetros de configuração:

  • allow_reuse_ip_after: Tipo Int - default 10. Quando um IP é usado, ele poderá ser reusado novamente após allow_reuse_ip_after outros IPs serem usados. Se o número for 0, um IP pode ser reusado em qualquer momento.
  • change_ip_after: Tipo Int - default 42. Número de requisições feitas por um mesmo IP.

Exemplo:

from antiblock_selenium import Firefox, Chrome

chrome = Chrome(allow_reuse_ip_after = 5, change_ip_after = 100)
firefox = Firefox(allow_reuse_ip_after = 5, change_ip_after = 100)

# use chrome/firefox como habitualmente usa os webdrivers

Rotacionar user-agents

Por enquanto, funcionalidade disponível apenas para Firefox.

Parâmetros de configuração:

  • user_agents: Tipo List - default [] (lista vazia). Lista de user-agents para ser rotacionada.
  • change_user_agent_after: Tipo Int - default 0. Número de requisições feitas com o mesmo user-agent. Se o valor for 0, o user-agent não será alterado.

Exemplo:

from antiblock_selenium import Firefox

user_agents = ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36',
  ]

firefox = Firefox(user_agents = user_agents, change_user_agent_after = 100)

#use firefox como habitualmente usa webdrivers 
...

Delays aleatórios ou fixos

Por padrão, o atraso entre uma requisição e outra é uma valor escolhido ao acaso entre 0.5 * 0.25 e 0.25 * 1.5, o mesmo comportamento do Scrapy.

Parâmetros de configuração:

  • time_between_calls: Tipo Float - default 0.25. Tempo em segundos entre uma requisição e outra.
  • random_delay: Tipo Bool - default True. Se True, um valor entre 0.5 * time_between_calls e 1.5 * time_between_calls será o delay escolhido entre cada requisição. Se False, o delay entre uma requisição e outra será fixo de time_between_calls segundos.

Exemplo:

from antiblock_selenium import Firefox, Chrome

# Tempo fixo de 10 segundos entre requisições
chrome = Chrome(time_between_calls = 10, random_delay = False)

# Tempo aleatório entre 0.5 * 10 e 1.5 * 10 entre cada requisição
firefox = Firefox(time_between_calls = 10, random_delay = True)

# use chrome/firefox como habitualmente usa os webdrivers

Persistência e carregamento de cookies

O selenium já possui mecanismos de gerenciamentos de cookies, disponíveis aqui. As funcionalidades abaixo são apenas facilitadores de uso, sendo:

  • Salvar cookies ao fechar o driver
  • Recarregar os últimos cookies salvos (salvos de uma última sessão do driver)
  • Carregar uma lista de cookies

Parâmetros de configuração:

  • cookie_domain: Tipo String - default ''. Para carregar cookies, o selenium precisa acessar o site onde os cookies são válidos. Esse parâmetro representa esse site.
  • persist_cookies_when_close: Tipo Bool - default False. Define se os cookies do driver serão salvos quando ele for fechado.
  • reload_cookies_when_start: Tipo Bool - default False. Define se os cookies salvos de uma outra sessão do driver que foi fechada será recarregada. Se esse parâmetro for True, cookie_domain não pode ser vazio.
  • location_of_cookies: Tipo String - default 'cookies.pkl'. Nome ou local onde os cookies serão salvos, se persist_cookies_when_close for definido como True.

Exemplo:

from antiblock_selenium import Firefox, Chrome

chrome = Chrome(persist_cookies_when_close = True)
firefox = Firefox(persist_cookies_when_close = True)

chrome.get('algum-site-que-requer-login')
firefox.get('algum-site-que-requer-login')

#Preencha os dados de login

chrome.close()
firefox.close()

chrome = Chrome(reload_cookies_when_start = True, cookie_domain = 'https://dominio-site-com-login.com')
firefox = Firefox(reload_cookies_when_start = True, cookie_domain = 'https://dominio-site-com-login.com')

Nem todos sites será possível salvar informação de login apenas salvando cookies.

Também é possível carregar uma lista de cookies para um domínio, use a função abaixo:

  • load_cookies
    • Parâmetros:
      • cookies: Tipo List. Lista de cookies.
      • cookie_domain: Tipo String. Domínio válido do cookie.

Exemplo:

from antiblock_selenium import Firefox, Chrome

chrome = Chrome()
firefox = Firefox()

cookies = [{'domain': 'www.google.com.br', 'expiry': 1591216842, 'httpOnly': False, 'name': 'UULE', 'path': '/', 'secure': False, 'value': 'a+cm9sZToxIHByb2R1Y2VyOjEyIHByb3ZlbmFuY2U6NiB0aW1lc3RhbXA6MTU5MTE5NTIzNzI5OTAwMCBsYXRsbmd7bGF0aXR1ZGVfZTc6NDY4MTgxODgwIGxvbmdpdHVkZV9lNzo4MjI3NTEyMH0gcmFkaXVzOjY0MDg4Nzgw'}, {'domain': '.google.com.br', 'expiry': 2145916801, 'httpOnly': False, 'name': 'CONSENT', 'path': '/', 'secure': False, 'value': 'WP.287758'}, {'domain': '.google.com.br', 'expiry': 1593787242, 'httpOnly': False, 'name': '1P_JAR', 'path': '/', 'secure': True, 'value': '2020-6-3-14'}, {'domain': '.google.com.br', 'expiry': 1607006421, 'httpOnly': True, 'name': 'NID', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '204=aZfE182RJB7HoA9WXJImPNFy4xT0-VCU9t2NhB8byzsMGdSdjnDQo7YkIexDtBsMKQxU0AZDfgyQkKn8T9rD8YN_3hqpIvasJRbg75GZzt8zYTO3dMgS7G1ftELWBzDAuhRb2bCa1iKwut2YfNYJp-2bshYcX0JD5RDW_Gp28Bc'}]


chrome.load_cookies(cookies = cookies, cookie_domain = 'https://www.google.com.br/')

firefox.load_cookies(cookies = cookies, cookie_domain = 'https://www.google.com.br/')

TO-DO

  • Rotação de user-agents para Chrome
  • Rotação de IPs via lista de proxys
  • Aumentar cobertura de testes

Metadata

Release files for antiblock-selenium 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for antiblock-selenium 0.0.3
File Size Uploaded Provenance Actions
antiblock-selenium-0.0.3.tar.gz 8.2 kB Without provenance Details for antiblock-selenium-0.0.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for antiblock-selenium 0.0.3
File Interpreter ABI Platform Actions
antiblock_selenium-0.0.3-py3-none-any.whl Python 3 none any Details for antiblock_selenium-0.0.3-py3-none-any.whl

Total release size: 19.3 kB

Release files / antiblock-selenium-0.0.3.tar.gz

Download URL antiblock-selenium-0.0.3.tar.gz
Size 8.2 kB
Tags Source
SHA-256 checksum
How to use checksums
be17087eb0cd0d6bdfb1445f5888f06ea198d6d338a462ed4529557545f9391f
BLAKE2b-256 checksum
How to use checksums
395b4194b3fd5400ed9dd84eda950f2d1f9c9fb8e4fda05953102c5c279d92ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.6.9

Release files / antiblock_selenium-0.0.3-py3-none-any.whl

Download URL antiblock_selenium-0.0.3-py3-none-any.whl
Size 11.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0336093c250729ea9cf49f854832ac0952d6566e2cd12f6b2179a3fb8356a59f
BLAKE2b-256 checksum
How to use checksums
42e97d1bde438db7c4b9009aad54a7385318ce2e96180e3db67931da02f5fd85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.6.9

Security for antiblock-selenium 0.0.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page