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 arvores XML e HTML
O XPath (XML Path Language) e uma linguagem de expressao padronizada pelo W3C para selecionar nos em uma arvore XML. Como todo HTML bem formado e exposto pelos navegadores como uma arvore DOM, o XPath tornou-se a lingua franca de web scraping, transformacoes XSLT, automacao de testes Selenium/Cypress e processamento de dados em XQuery.
O padrao evoluiu em quatro grandes revisoes: XPath 1.0 (1999) — a versao ainda mais implementada; XPath 2.0 (2010) — adicionou sequencias tipadas, regex e biblioteca alinhada ao XQuery; XPath 3.0 (2014) — introduziu funcoes 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 referencia para 3.1.
Fundamentos de sintaxe: eixos, predicados e passos
Uma expressao XPath e uma sequencia de passos de localizacao 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 unica maneira de subir ou andar lateralmente na arvore.
Exemplos praticos e funcoes principais
Um punhado de expressoes 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 funcoes mais uteis do XPath 1.0 sao text(), contains(), starts-with(), normalize-space(), string-length(), count(), position() e last(). O XPath 2.0+ adiciona matches() com regex, tokenize(), replace() e aritmetica completa de data/hora.
XPath vs seletores CSS: quando cada um vence
Seletores CSS sao mais curtos, mais rapidos em navegadores e familiares ao desenvolvedor front-end. O XPath e a melhor ferramenta sempre que voce precisa de navegar para o pai (.. ou ancestor::), casar por conteudo de texto (contains(text(), 'Total')), logica posicional entre irmaos ou predicados booleanos complexos. O CSS nivel 4 esta diminuindo a distancia 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 dificil.
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 rapido),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, alem 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 nao 0-based, entao //li[1] e o primeiro item; HTML nao e XML — marcacao invalida quebra um motor XPath 1.0 estrito, sempre passe paginas 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 facil de ler e ligeiramente mais rapido nos motores modernos. Use XPath quando precisar casar por texto visivel, subir para um pai ou filtrar irmaos por posicao — coisas que o CSS nao 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, nao o segundo. Isso pega quase todo desenvolvedor vindo de JavaScript ou Python.
Da para validar XPath offline?
Sim. Qualquer motor XPath conforme compila a expressao sintaticamente sem rede. Esta ferramenta roda inteiramente no seu navegador via document.evaluate() — nada e enviado para o servidor.
Por que minha expressao retorna zero nos contra uma pagina HTML?
Tres suspeitos usuais: (i) a pagina usa namespaces XHTML que voce nao ligou; (ii) as tags estao em maiusculas (DIV) mas XPath 1.0 e case-sensitive; (iii) o conteudo e renderizado por JavaScript apos o load e nao estava no HTML original. Use o DOM renderizado, nao o corpo da resposta.
Qual a diferenca 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.