
Selenium Chromedriver personalizado | Zero configuração | Passa por TODOS os sistemas de mitigação de bots (como Distil / Imperva / Datadadome / CloudFlare IUAM)
https://github.com/ultrafunkamsterdam/undetected-chromedriver
Patch otimizado do Selenium Chromedriver que não aciona serviços anti-bot como Distill Network / Imperva / DataDome / Botprotect.io Baixa automaticamente o binário do driver e o corrige.
pip install undetected-chromedriver
ou , se você está se sentindo aventureiro, instale diretamente via github```
pip install git+https://www.github.com/ultrafunkamsterdam/undetected-chromedriver@master # replace @master with @branchname for other branches
Vou colocar limites no rastreador de problemas. Ele tem sido abusado por tempo demais.
Alguma notícia boa?
Sim, abri Undetected-Discussions que acho que nos ajudará melhor a longo prazo.
ESTE PACOTE NÃO, e repito NÃO esconde o seu endereço de IP, então ao executar a partir de um datacenter (mesmo os menores), as chances são grandes de você não passar! Além disso, se a reputação do seu IP em casa for baixa, você não vai passar!
Executando o código a seguir em casa e a partir de um datacenter.```python import undetected_chromedriver as uc driver = uc.Chrome(headless=True,use_subprocess=False) driver.get('https://nowsecure.nl') driver.save_screenshot('nowsecure.png')
<div style="display:flex;flex-direction:row">
<img src="https://assets.kitploit.com/production/public/readmes/50956/c1bde1e3621f106c2504cf4ecb9cc9015b23340c7a9bd5f20364c27016b2dd40/4f02747809c3b183c8af8238f6858540057402adfe0f26d4fa9d646091fa5781-display-v1.webp" width="720"/>
<img src="https://assets.kitploit.com/production/public/readmes/50956/ac44f4c3d408a07f4a0b96b2eb37ecc58f3a9711f32b31a642c27e96ad2ab767/c94f4da9c540b7890c9350605f085bddc730ed40073c886ff94a2475bdfe806a-display-v1.webp" width="720"/>
</div>
<!--  -->
<!--  -->
## 3.5.0 ##
- o selenium 4.10 causou alguns problemas. 3.5.0 é compatível e tem selenium 4.9 ou superior fixado. Não posso mais suportar <4.9.
- Removidos alguns kwargs do construtor: service_args, service_creationflags, service_log_path.
- adicionada a função geradora find_elements_recursive. que é mais uma função de conveniência, pois muitos sites parecem servir conteúdos diferentes de frames diferentes, dificultando
o uso de find_elements
## 3.4.5 ##
- Que semana. Os avanços recentes em algoritmos de Detecção de Automação me derrotaram (foi o que pensei) com a 3.4.0, mas aparentemente, para alguns sistemas operacionais isso causou um erro ao interagir com elementos. Tive que reverter usando um método diferente, corrigir bugs, e agora finalmente consegui manter a ideia inicial (+ corrigir bugs)
- A atualização para o chrome 110 causou outra surpresa, desta vez para usuários HEADLESS.
- embora o headless não seja suportado oficialmente, eu apliquei o patch!
- feliz em anunciar que AGORA TAMBÉM É INDETECTÁVEL (mas ainda não suportado ;))
- agradecimentos especiais aqui para [@mdmintz](https://github.com/mdmintz) e [@abdulzain6](https://github.com/abdulzain6)
- também agradecimentos especiais para [@sebdelsol](https://github.com/sebdelsol) pela ajuda em toda a seção de issues completamente voluntária, você deve ser louco :)
### 3.4.0 ###
**Grande atualização! tenha cuidado, pois -potencialmente- pode quebrar seu código.**
* reescrito o mecanismo anti-detecção; em vez de remover e renomear variáveis, simplesmente as mantemos, mas impedimos que sejam injetadas em primeiro lugar. Isso nos manterá seguros contra detecção pelo menos num futuro próximo.
* reescrita a nomenclatura dos arquivos, para evitar acabar com 1000 de {randomstring}_chromedriver.exe; em vez disso, é apenas chamado de undetected_chromedriver.exe
* limpeza: removidos os arquivos compat, v2 e a pasta tests
### 3.2.0 ###
* adicionado um exemplo contendo código típico de webdriver, respostas a perguntas frequentes, armadilhas + mostrando alguns truques para eliminar
a necessidade de multithreading.
### [>>>> código de exemplo aqui <<<<](https://github.com/ultrafunkamsterdam/undetected-chromedriver/blob/master/example/example.py)
* adicionado o método WebElement.click_safe(), que você pode tentar caso seja detectado após clicar em um link. Não é garantido que funcione.
* adicionado WebElement.children(self, tag=None, recursive=False)
para obter/encontrar facilmente nós filhos. exemplo:
```
body = driver.find_element('tag name', 'body')
# get the 6th child (any tag) of body, and grab all img's within (recursive).
images = body.children()[6].children('img', True)
srcs = list(map(lambda _:_.attrs.get('src'), images))
```
* adicionado example.py para onde posso apontar as pessoas quando fazem perguntas bobas
(não, na verdade é bem legal, todos deveriam ver)
* adicionado suporte para a plataforma lambda
* adicionado suporte para x86_32
* adicionado suporte para sistemas que se identificam como linux2
* alguma refatoração
### 3.1.6 ###
### ainda seguindo forte ###
- use_subprocess agora é True por padrão. muitas pessoas não entendem multiprocessing e __name__ == '__main__', e após testes,
parece não fazer mais diferença no chrome 104+
- adicionado no_sandbox, que é True por padrão, e isso sem a irritante barra "você está usando uma linha de comando insegura ...".
- atualizada a [imagem Docker](https://hub.docker.com/r/ultrafunk/undetected-chromedriver). agora você pode usar vnc ou rdp no seu container para ver a
janela real do navegador
[](https://i.imgur.com/W7vriN9.mp4)
- claro, o modo "regular" também funciona
[](https://i.imgur.com/2qSNyuK.mp4)
### 3.1.0 ###
**esta versão `pode` quebrar seu código, teste antes de atualizar!**
- **adicionada nova lógica anti-detecção!**
- v2 se tornou o módulo principal, então não é mais necessário referenciar v2. isso significa que agora você pode simplesmente usar: ```python
import undetected_chromedriver as uc
driver = uc.Chrome()
driver.get('https://nowsecure.nl')
para compatibilidade reversa, o v2 não é removido, mas é um alias para o módulo principal.
Corrigido o incômodo da "tela de boas-vindas" em SOs não-Windows. Para aqueles nagfetishists que ❤ telas de boas-vindas e alimentar o google com ainda mais dados, use Chrome(suppress_welcome=False).
substituído executable_path no construtor em favor de browser_executable_path
que não deve ser usado a menos que você seja o caso extremo (sim, você é) que não consegue adicionar sua pasta de instalação personalizada do chrome à variável de ambiente PATH,
ou tenha um exército de navegadores/versões diferentes e a busca automática retorne o navegador errado
"v1" (?) movido para _compat por enquanto.
corrigidas as versões das dependências