Pular para o conteúdo

Navegador e DOM

MétodoAssinaturaDescrição
g.dom.click(selector, options?) → PromiseClica em um elemento
g.dom.enterText(selector, value, options?) → PromiseDigita texto em um input
g.dom.selectOption(selector, options?) → PromiseSeleciona uma opção em um <select> HTML nativo por valor, label ou índice baseado em zero
g.dom.scrollTo(selector, options?) → PromiseRola até um elemento
g.dom.pressKey(key, options?) → PromisePressiona uma tecla
g.dom.highlight(selector, durationMs?, options?) → PromiseDestaca visualmente um elemento
g.dom.waitForElement(selector, options?) → PromiseAguarda elemento usando MutationObserver, sem polling
g.dom.waitForDomStable(options?) → PromiseAguarda até o DOM parar de mudar por um período silencioso
g.dom.waitForReady(selector, options?) → PromiseEspera combinada por elemento + estabilidade do DOM; recomendada para SPAs

ElementOptions:

{
selectorType?: "css" | "xpath" | "text" | "text-contains" // padrão: "css"
browserTabId?: string // padrão: guia ativa
}

ClickOptions:

{
selectorType?: "css" | "xpath" | "text" | "text-contains"
browserTabId?: string
mode?: "default" | "human" // padrão: entrada CDP determinística; "human" usa movimento visível do mouse
}

Use o modo padrão de clique para automação estável. Use { mode: "human" } quando a página precisa de movimento visível do ponteiro ou comportamento parecido com hover antes do clique.

SelectOptionOptions:

{
value?: string
label?: string
index?: number
selectorType?: "css" | "xpath"
browserTabId?: string
}

Use g.dom.selectOption para controles <select> nativos. Para comboboxes, listboxes e menus suspensos renderizados por frameworks, use os controles visíveis da página com métodos de clique, teclado e espera.

WaitForElementOptions:

{
timeout?: number
visible?: boolean
selectorType?: "css" | "xpath"
browserTabId?: string
}

WaitForDomStableOptions:

{
timeout?: number
quietPeriod?: number
browserTabId?: string
}

WaitForReadyOptions:

{
timeout?: number
quietPeriod?: number
selectorType?: "css" | "xpath"
browserTabId?: string
}

MétodoAssinaturaDescrição
g.dom.extractContent(selector, options?) → Promise<string>Extrai texto de um elemento
g.dom.getElements(selector, attributeNames, options?) → Promise<Record[]>Obtém atributos de elementos correspondentes
g.dom.countElements(selector, options?) → Promise<number>Conta elementos correspondentes
g.dom.getElementXPaths(selector, options?) → Promise<string[]>Obtém XPath de cada elemento correspondente

MétodoAssinaturaDescrição
g.page.getDom(options?) → Promise<string>Obtém o HTML da página
g.page.getPageSource(options?) → Promise<string>Obtém o código-fonte bruto da página
g.page.getPageElements(options?) → Promise<PageElement[]>Obtém elementos estruturados da página (cabeçalhos, links, botões, inputs)
g.page.executeJS(script, options?) → Promise<any>Executa JavaScript na guia do navegador e retorna o resultado do navegador
g.page.getUrl(options?) → Promise<string>Obtém a URL atual da página
g.page.ocr(options?) → Promise<OcrResult>Executa OCR no viewport ou em uma região

g.page.executeJS() retorna valores estruturados diretamente. Se a expressão do navegador retorna objeto, array, número, booleano, string ou null, JavaScript e Janet recebem o valor correspondente. Não envolva snippets do navegador em JSON.stringify(...) e depois JSON.parse(...) no script host salvo quando você realmente quer transportar texto.

Prefira:

const links = await g.page.executeJS(`
Array.from(document.querySelectorAll("a"))
.map(a => ({ text: a.textContent.trim(), href: a.href }))
`);

Use JSON explícito apenas quando o próprio resultado deve ser uma string:

const jsonText = await g.page.executeJS(`JSON.stringify(window.__APP_STATE__)`);
const appState = JSON.parse(jsonText);

MétodoAssinaturaDescrição
g.nav.navigateToUrl(url, options?) → Promise<NavigateResult>Navega para uma URL e retorna status/cabeçalhos
g.nav.blockRedirects() → voidBloqueia redirecionamentos server-side (301/302/307)
g.nav.allowRedirects() → voidRestaura o comportamento padrão de redirecionamento

NavigateOptions:

{
waitForLoad?: boolean
browserTabId?: string
stealth?: boolean | StealthOptions
detectRedirects?: boolean
}

StealthOptions:

{
webdriver?: boolean
chromeRuntime?: boolean
permissions?: boolean
plugins?: boolean
languages?: boolean
}

NavigateResult:

{
statusCode: number
headers: Record<string, string>
finalUrl?: string
redirectDetected?: boolean
metaRefresh?: string
}

MétodoAssinaturaDescrição
g.tabs.getTabs() → TabInfo[]Obtém todas as guias abertas
g.tabs.newBrowserTab(options?) → Promise<string>Cria uma nova guia e retorna o ID
g.tabs.closeTab(tabId?) → PromiseFecha uma guia, padrão para a ativa
g.tabs.closeAllTabs()Fecha todas as guias
g.tabs.closeOtherTabs(tabId?)Fecha todas as guias exceto a informada
g.tabs.setActiveBrowserTab(tabId)Alterna para uma guia
g.tabs.getActiveBrowserTab() → string | nullObtém o ID da guia ativa
g.tabs.getBrowserTabInfo(tabId) → TabInfoObtém informações de uma guia específica
g.tabs.setBrowserTabName(tabId, name)Renomeia uma guia
g.tabs.findTabByUrl(pattern) → TabInfo | nullEncontra guia cuja URL contém o padrão
g.tabs.findTabByTitle(pattern) → TabInfo | nullEncontra guia cujo título contém o padrão
g.tabs.nextTab()Alterna para a próxima guia
g.tabs.prevTab()Alterna para a guia anterior
g.tabs.moveTab(tabId, index)Move uma guia para outra posição

TabInfo:

{
id: string
name: string
url: string
pageTitle: string
isActive?: boolean
}

MétodoAssinaturaDescrição
g.screenshot.screenshot(path?) → Promise<string>Captura o viewport e retorna base64 ou caminho de arquivo
g.screenshot.screenshotElement(selector, path?, options?) → Promise<string>Captura um elemento específico
g.screenshot.screenshotFullPage(path?, options?) → Promise<string>Captura a página rolável inteira

ScreenshotFullPageOptions:

{
clean?: boolean
browserTabId?: string
}

MétodoAssinaturaDescrição
g.viewport.setViewport(options)Define o tamanho do viewport por preset ou dimensões customizadas
g.viewport.getViewport(tabId?) → ViewportInfo | nullObtém informações do viewport atual
g.viewport.getViewportPresets() → string[]Lista nomes de presets disponíveis

ViewportOptions:

{
tabId?: string
preset?: string
width?: number
height?: number
}

O Guida usa dois modos de viewport:

  • Presets desktop como Full HD, QHD e 4K UHD usam escala fit-to-pane para revisar layouts grandes dentro de um painel menor.
  • Presets mobile/tablet como Mobile M e Tablet Portrait usam emulação de dispositivo, incluindo largura responsiva, device scale factor e comportamento touch.

Dimensões customizadas permanecem em desktop fit por padrão.


Organiza guias do navegador em painéis divididos.

MétodoAssinaturaAsyncDescrição
single()NãoColapsa para painel único
horizontal(n?)NãoLayout lado a lado
vertical(n?)NãoLayout empilhado
quad()NãoGrade 2x2
grid(rows, cols)NãoLayout de grade customizado
moveToPane(docId, paneIndex)NãoMove um documento para um painel específico
focusPane(paneIndex)NãoFoca um painel
getPanes() → PaneInfo[]NãoObtém todos os painéis e documentos
arrange(docIds)NãoOrganiza documentos específicos
arrangeByPattern(urlPattern)NãoOrganiza documentos cuja URL corresponde ao padrão

MétodoAssinaturaAsyncDescrição
copy(text)NãoCopia texto para a área de transferência
paste() → stringNãoLê texto da área de transferência
copyElement(selector, options?) → Promise<string>SimCopia o texto de um elemento

Controla painéis da interface do Guida a partir de scripts.

MétodoAssinaturaAsyncDescrição
show(paneName)NãoMostra um painel
hide(paneName)NãoOculta um painel
toggle(paneName)NãoAlterna visibilidade do painel
focus(paneName)NãoFoca um painel

Nomes de painéis: console, workspace, llminsight, secrets, taskmanager, history, searchIndex, store, queues, queueprocessor, mcphistory, terminal.


MétodoAssinaturaAsyncDescrição
toMarkdown(html, options?) → stringNãoConverte HTML para Markdown

HtmlToMarkdownOptions:

{
githubFlavored?: boolean
removeComments?: boolean
smartHrefHandling?: boolean
listBulletChar?: string
}