Pydoll
O Pydoll automatiza navegadores Chromium pelo Chrome DevTools Protocol, sem webdriver e sem esperas manuais. Use para extrair dados, testar aplicações web e automatizar fluxos reais de navegador em Python, com uma API síncrona ou assíncrona.
Instalação
O Pydoll controla o Chrome ou o Edge que já estão instalados na sua máquina. Você não precisa baixar um webdriver nem manter as versões do driver em sincronia com o navegador.
Novo no Pydoll? Siga o Primeiros passos para um passo a passo completo.
Início rápido
Abra uma página, encontre elementos pela forma como você os descreveria para uma pessoa e interaja com timing humanizado:
import time
from pydoll.sync import Chrome
def main():
with Chrome() as browser:
tab = browser.start()
tab.go_to('https://github.com/autoscrape-labs/pydoll')
star_button = tab.find(
tag_name='button',
timeout=5,
raise_exc=False
)
if not star_button:
print('Button not found.')
return
star_button.click()
time.sleep(3)
main()
import asyncio
from pydoll import Chrome
async def main():
async with Chrome() as browser:
tab = await browser.start()
await tab.go_to('https://github.com/autoscrape-labs/pydoll')
star_button = await tab.find(
tag_name='button',
timeout=5,
raise_exc=False
)
if not star_button:
print('Button not found.')
return
await star_button.click()
await asyncio.sleep(3)
asyncio.run(main())
Quando o objetivo é dado, e não interação, defina um modelo e deixe o Pydoll extraí-lo, tipado e validado:
from pydoll.sync import Chrome, ExtractionModel, Field
class Quote(ExtractionModel):
text: str = Field(selector='.text')
author: str = Field(selector='.author')
tags: list[str] = Field(selector='.tag')
def main():
with Chrome() as browser:
tab = browser.start()
tab.go_to('https://quotes.toscrape.com')
quotes = tab.extract_all(Quote, scope='.quote', timeout=5)
for quote in quotes:
print(f'{quote.author}: {quote.text}')
main()
import asyncio
from pydoll import Chrome, ExtractionModel, Field
class Quote(ExtractionModel):
text: str = Field(selector='.text')
author: str = Field(selector='.author')
tags: list[str] = Field(selector='.tag')
async def main():
async with Chrome() as browser:
tab = await browser.start()
await tab.go_to('https://quotes.toscrape.com')
quotes = await tab.extract_all(Quote, scope='.quote', timeout=5)
for quote in quotes:
print(f'{quote.author}: {quote.text}')
asyncio.run(main())
Os modelos suportam seletores CSS e XPath, mira em atributos HTML, transformações personalizadas e modelos aninhados. Saiba mais em Extração estruturada.
Já tem um script Playwright? Mantenha ele. Um import o coloca no Pydoll:
import asyncio
from pydoll.playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto('https://quotes.toscrape.com')
print(await page.locator('.quote .text').first.inner_text())
await browser.close()
asyncio.run(main())
Locators, get_by_role, espera automática, rotas, diálogos e downloads mantêm a semântica do Playwright; expect() e o test runner ficam fora do escopo. Veja Traga seu script Playwright.
Por que Pydoll
- Sem webdriver: o Pydoll se conecta direto ao navegador pelo Chrome DevTools Protocol. Nada para baixar, nenhuma incompatibilidade de versão para depurar.
- Interações humanizadas: os cliques seguem trajetórias curvas do mouse e a digitação tem ritmo variável, com erros de digitação corrigidos de vez em quando, então sua automação se comporta como uma pessoa no teclado.
- Síncrono ou assíncrono: a mesma API bloqueia chamada a chamada a partir de
pydoll.sync, ou roda sobreasynciopara que um único processo controle muitas abas e navegadores ao mesmo tempo. - Compatível com o Playwright: mantenha um script Playwright existente e troque um import; ele roda pela conexão CDP do Pydoll, sem processo driver.
- Tratamento do Cloudflare Turnstile: o Pydoll detecta o widget Turnstile e clica nele nativamente. Nenhum serviço externo de captcha para pagar ou integrar.
- Controle de rede: monitore, intercepte e modifique requisições conforme a página as faz.
- Extração tipada: declare um modelo Pydantic e receba objetos validados e amigáveis à IDE, em vez de elementos crus.
Próximos passos
- Primeiros passos: instale o Pydoll e rode seu primeiro script.
- Sua primeira automação: faça login em um site e extraia dados tipados.
- Traga seu script Playwright: um import, e seu código Playwright roda no Pydoll.
- Migrando do Selenium e do Playwright: mapeie os comandos que você conhece para o Pydoll.
- Passando despercebido: a configuração mínima para evitar os sinais óbvios de bot.
- Guias: um guia por funcionalidade, do encontro de elementos à interceptação de requisições.
- Referência da API: cada classe e método público.
Principais patrocinadores
WELCOME20 20% de desconto
The Web Scraping Club
A newsletter número 1 dedicada a web scraping. Leia a análise completa deles sobre o Pydoll.
NodeMaven
Proxies de alta qualidade para scraping e automação. Segmentação por CEP, 99,9% de uptime, sem KYC.
PYDOLL35 35% de desconto
PYDOLL40 40% de desconto em ISP
NiuProxy
Proxies residenciais rotativos: 10TB a $0.35/GB ou 1TB a $0.50/GB para usuários do Pydoll.
PAY2 10% de desconto na recarga
Patrocinadores
Os patrocinadores mantêm o projeto funcionando e ajudam a financiar o desenvolvimento contínuo. Obrigado a todos que apoiam o Pydoll.
PYDOLL 15% de desconto
Rede de proxies residenciais com mais de 190 localidades
1GB grátis pelo nosso link
Proxies para web scraping & automação
+
Sua logo aqui
Torne-se um patrocinador
Licença
O Pydoll é distribuído sob a Licença MIT, então você pode usá-lo livremente em projetos pessoais e comerciais.




