Validador de XPath
Verifica se uma expressão XPath é sintaticamente válida em um documento HTML colado. Conta quantos nós casam.
XPath: a linguagem de consulta do W3C para árvores XML e HTML
O XPath (XML Path Language) e uma linguagem de expressão padronizada pelo W3C para selecionar nos em uma árvore XML. Como todo HTML bem formado e exposto pelos navegadores como uma árvore DOM, o XPath tornou-se a língua franca de web scraping, transformacoes XSLT, automacao de testes Selenium/Cypress e processamento de dados em XQuery.
O padrão evoluiu em quatro grandes revisoes: XPath 1.0 (1999) — a versão ainda mais implementada; XPath 2.0 (2010) — adicionou sequências tipadas, regex e biblioteca alinhada ao XQuery; XPath 3.0 (2014) — introduziu funções de ordem superior e melhor tratamento de erro; e XPath 3.1 (2017) — incluiu maps, arrays e suporte a JSON. Navegadores (document.evaluate()) e a maior parte das libs de scraping ficaram em 1.0; o Saxon-HE/EE na JVM e o motor de referência para 3.1.
Fundamentos de sintaxe: eixos, predicados e passos
Uma expressão XPath e uma sequência de passos de localização separados por /. Cada passo tem o formato eixo::teste-de-no[predicado]:
/root/child— caminho absoluto a partir da raiz do documento.//descendant— combina o no em qualquer profundidade abaixo do contexto.*— coringa para qualquer elemento;@attrseleciona um atributo.[predicado]— filtro booleano ou posicional aplicado ao conjunto de nos..e..— no atual e no pai, respectivamente.
Existem 13 eixos em XPath 1.0, incluindo parent, child, descendant, ancestor, following-sibling, preceding-sibling, self e attribute. A maioria dos motores aceita as formas abreviadas (/, //, @), mas a forma extensa e as vezes a única maneira de subir ou andar lateralmente na árvore.
Exemplos praticos e funções principais
Um punhado de expressões cobre 90% do scraping de mundo real:
//div[@class='card'] // todo <div class="card">
//a[contains(@href, 'github')] // links que apontam para o GitHub
//input[@type='text'][1] // primeiro input de texto
//tr[td[normalize-space()='Total']] // linhas cuja celula tem texto "Total"
//*[@id='main']//p[position() < 4] // tres primeiros paragrafos em #main
count(//li) // quantidade de itens de lista
As funções mais úteis do XPath 1.0 são text(), contains(), starts-with(), normalize-space(), string-length(), count(), position() e last(). O XPath 2.0+ adiciona matches() com regex, tokenize(), replace() e aritmética completa de data/hora.
XPath vs seletores CSS: quando cada um vence
Seletores CSS são mais curtos, mais rapidos em navegadores e familiares ao desenvolvedor front-end. O XPath e a melhor ferramenta sempre que você precisa de navegar para o pai (.. ou ancestor::), casar por conteúdo de texto (contains(text(), 'Total')), lógica posicional entre irmaos ou predicados booleanos complexos. O CSS nível 4 esta diminuindo a distância com :has() e :is(), mas o XPath continua estritamente mais expressivo. A maioria dos projetos Selenium mistura os dois: CSS para o simples, XPath para o difícil.
Ferramentas: navegadores, libs de scraping e editores
- DevTools de Chrome / Firefox: digite
$x("//a")no Console para avaliar XPath contra o DOM ao vivo. - Python:
lxml(bindings da libxml2 — o mais rápido),parsel(usado pelo Scrapy) eBeautifulSoupcom backend lxml. - Node.js: pacote npm
xpathsobrexmldome opage.locator("xpath=...")do Playwright. - JVM: Saxon-HE (gratuito) e Saxon-EE para XPath 3.1 completo, além do
javax.xml.xpathembutido para 1.0. - Selenium:
By.XPATHem todas as linguagens (Python, Java, C#, Ruby, JS). - Playgrounds online: xpath.in, freeformatter.com/xpath-tester e o sandbox do tutorial XML do W3C.
Pegadinhas comuns e notas de performance
O XPath tem alguns detalhes que pegam os iniciantes: a indexacao e 1-based e não 0-based, então //li[1] e o primeiro item; HTML não e XML — marcacao invalida quebra um motor XPath 1.0 estrito, sempre passe páginas raspadas por um parser HTML-aware como html.fromstring do lxml ou o jsoup; namespaces precisam ser ligados explicitamente (use um contexto de namespace em Java, o dict namespaces no lxml); o atalho // e caro em documentos grandes porque percorre todo descendente, prefira caminhos ancorados quando performance importa. Para XML muito grande, os motores em C (libxml2, Joost do Saxon) superam parsers puros em Java/JS por 5–20x.
FAQ
Devo usar CSS ou XPath no Selenium?
CSS e mais fácil de ler e ligeiramente mais rápido nos motores modernos. Use XPath quando precisar casar por texto visível, subir para um pai ou filtrar irmaos por posição — coisas que o CSS não expressa nem com :has().
A indexacao XPath e 0-based ou 1-based?
O XPath usa indexacao 1-based. //li[1] e o primeiro item, não o segundo. Isso pega quase todo desenvolvedor vindo de JavaScript ou Python.
Da para validar XPath offline?
Sim. Qualquer motor XPath conforme compila a expressão sintaticamente sem rede. Esta ferramenta roda inteiramente no seu navegador via document.evaluate() — nada e enviado para o servidor.
Por que minha expressão retorna zero nos contra uma página HTML?
Três suspeitos usuais: (i) a página usa namespaces XHTML que você não ligou; (ii) as tags estão em maiúsculas (DIV) mas XPath 1.0 e case-sensitive; (iii) o conteúdo e renderizado por JavaScript após o load e não estava no HTML original. Use o DOM renderizado, não o corpo da resposta.
Qual a diferença entre / e //?
/ seleciona um filho direto, // qualquer descendente em qualquer profundidade. /html/body/div casa apenas divs no topo do body; //div casa todo div do documento, mas a custo de CPU maior.
Ferramentas Relacionadas
Validador de Seletor CSS
Verifica se um seletor CSS é válido e calcula sua especificidade (a,b,c). Lista classes, IDs e elementos detectados.
Validador de PIS/PASEP
Valide números de PIS/PASEP pelo algoritmo oficial com dígito verificador, sem enviar dados para servidores. Gratuito e sem cadastro.
Validador de Handle GitHub
Valida formato de username GitHub: 1-39 caracteres alfanuméricos e hífens, não pode começar ou terminar com hífen, sem hífens consecutivos.
Validador de RFC do México
Valida o RFC (Registro Federal de Contribuyentes) do México — pessoa física (13 caracteres) ou pessoa jurídica (12 caracteres). Verifica formato e dígito verificador.
Validador Header Expires
Valide o cabeçalho HTTP Expires (RFC 7234) e descubra quanto tempo falta para o conteúdo expirar. Útil para depurar cache, CDNs e desempenho de sites.
Validador de ICCID (Chip SIM)
Valide o ICCID (Integrated Circuit Card Identifier) de chips SIM (19-20 dígitos) com checagem do dígito Luhn e identificação da operadora.