> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/products/pt-br/web-unblocker/custom-browser-instructions/browser-instructions-beta.md).

# Instruções do navegador (Beta)

Com Web Unblocker, você pode definir instruções do navegador ao criar uma tarefa para um processo de coleta de dados mais fluido.

Ao usar Instruções Personalizadas do Navegador, você pode definir suas próprias instruções específicas do navegador que são executadas ao renderizar JavaScript.

{% hint style="success" %}
Gerar **Instruções do navegador automaticamente** no [**Playground da Web Scraper API**](https://dashboard.oxylabs.io/?route=/api-playground) no painel da Oxylabs. Configure ações do navegador, teste-as e exporte as instruções geradas em formato JSON.
{% endhint %}

## Como usar?

Para usar instruções do navegador, forneça um conjunto de `browser_instructions` ao criar um job.

Digamos que você queira pesquisar o termo `caixas de pizza` em um site.

<figure><img src="https://1795063165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2Fgit-blob-f4d808b71a0a56ac417c6c71f46b5a53d1401f29%2Fbi_1.png?alt=media" alt=""><figcaption></figcaption></figure>

Um exemplo de parâmetros do job seria o seguinte:

{% code overflow="wrap" %}

```bash
curl -k -x https://unblock.oxylabs.io:60000 \
-U 'USERNAME:PASSWORD' \\
'https://www.ebay.com' \
-H 'x-oxylabs-render: html' \
-H "x-oxylabs-browser-instructions: [{\"type\":\"input\",\"value\":\"pizza boxes\",\"selector\":{\"type\":\"xpath\",\"value\":\"\/\/input[@class='gh-tb ui-autocomplete-input']\"}},{\"type\":\"click\",\"selector\":{\"type\":\"xpath\",\"value\":\"\/\/input[@type='submit']\"}},{\"type\":\"wait\",\"wait_time_s\":5}]"
```

{% endcode %}

**Etapa 1.** Você deve fornecer o `x-oxylabs-render: html` parâmetro.

**Etapa 2.** As instruções do navegador devem ser descritas no `x-oxylabs-browser_instructions` campo.

{% hint style="info" %}
As instruções do navegador fornecidas como valor do cabeçalho devem ser escapadas em JSON e não conter espaços extras.
{% endhint %}

As instruções de navegador de exemplo acima especificam que o objetivo é inserir um termo de busca `caixas de pizza` em um campo de busca, clicar no `busca` botão e aguardar 5 segundos para o conteúdo carregar.

O resultado coletado deve ser semelhante ao seguinte:

```html
<!doctype html><html>
Conteúdo após executar as instruções      
</html>
```

O HTML coletado deve ser assim:

<figure><img src="https://1795063165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2Fgit-blob-15c3241746723aefc211766dbf8c4cb5549114ff%2Fbi_2.png?alt=media" alt=""><figcaption></figcaption></figure>

## Obtendo recursos do navegador <a href="#fetching-browser-resources" id="fetching-browser-resources"></a>

Fornecemos uma instrução de navegador independente para obter recursos do navegador.

A função é definida aqui:

Usando `fetch_resource` resultará no job retornar a primeira ocorrência de um recurso Fetch/XHR que corresponda ao formato fornecido em vez do HTML que está sendo segmentado.

Digamos que queremos segmentar um recurso GraphQL que é buscado ao visitar naturalmente uma página de produto no navegador. Forneceremos as informações do job assim:

{% code overflow="wrap" %}

```bash
curl -k -x https://unblock.oxylabs.io:60000 \
-U 'USERNAME:PASSWORD' \\
'https://www.example.com/product-page/123' \
-H 'x-oxylabs-render: html' \
-H "x-oxylabs-browser-instructions: [{\"type\": \"fetch_resource\",\"filter\": \"\/graphql\/product-info\/123\"}]"
```

{% endcode %}

Essas instruções resultarão em um resultado como este:

```html
{"product_id": 123, "description": "", "price": 456}
```

## Lista de instruções de navegador compatíveis <a href="#list-of-supported-browser-instructions" id="list-of-supported-browser-instructions"></a>

### Argumentos gerais

Todas as instruções definidas abaixo têm um conjunto consistente de argumentos. Os argumentos são os seguintes.

#### `type` <a href="#type" id="type"></a>

* **Tipo**: `Enum["click", "input", "scroll", "scroll_to_bottom", "wait", "wait_for_element", "fetch_resource"]`
* **Descrição:** Tipo da instrução do navegador.

#### `timeout_s` <a href="#timeout_s" id="timeout_s"></a>

* **Tipo**: `inteiro`
* **Descrição:** Quanto tempo até a ação ser ignorada se não for concluída a tempo.
* **Restrições**: 0 < `timeout_s` <= 60
* **Valor padrão**: 5

#### `wait_time_s` <a href="#wait_time_s" id="wait_time_s"></a>

* **Tipo**: `inteiro`
* **Descrição:** Quanto tempo esperar antes de executar a próxima ação.
* **Restrições**: 0 < `wait_time_s` <= 60
* **Valor padrão**: 0

#### `on_error` <a href="#on_error" id="on_error"></a>

* **Tipo**: `Enum["error", "skip"]`
* **Descrição:** Indicador do que fazer com as instruções caso esta instrução falhe:
  * `"error"`: Interrompe a execução das instruções do navegador.
  * `"skip"`: Continua com a próxima instrução.
* **Valor padrão**: `"error"`

#### Exemplo com argumentos gerais

{% code overflow="wrap" %}

```bash
{\"type\": \"wait_for_element\", \"selector\": {\"type\": \"text\", \"value\": \"Load More Items\"},\"timeout_s\": 5, \"wait_time_s\": 2, \"on_error\": \"skip\"}
```

{% endcode %}

### Instruções <a href="#click" id="click"></a>

#### `click` <a href="#click" id="click"></a>

* **Descrição**: Clica em um elemento e espera uma quantidade definida de segundos.
* **Args:**
  * `type: str = "click"`
  * `selector: dict`
    * `type: Enum["xpath", "css", "text"]`
    * `value: str`
* **Exemplo**:

{% code overflow="wrap" %}

```bash
{\"type\": \"click\",\"selector\": {\"type\": \"xpath\",\"value\": \"\/\/button\"}}
```

{% endcode %}

#### `input` <a href="#input" id="input"></a>

* **Descrição**: Insere texto em um elemento selecionado.
* **Args:**
  * `type: str = "input"`
  * `selector: dict`
    * `type: Enum["xpath", "css", "text"]`
    * `value: str`
  * `value: str`
  * **Exemplo:**

{% code overflow="wrap" %}

```bash
{\"type\": \"input\",\"selector\": {\"type\": \"xpath\",\"value\": \"\/\/input\"},\"value\": \"pizza boxes\"}
```

{% endcode %}

#### `scroll` <a href="#scroll" id="scroll"></a>

* **Descrição**: Rola um número definido de pixels.
* **Args:**
  * `type: str = "scroll"`
  * `x: int`
  * `y: int`
* **Exemplo:**

```bash
{\"type\": \"scroll\",\"x\": 0,\"y\": 100}
```

#### `scroll_to_bottom` <a href="#scroll_to_bottom" id="scroll_to_bottom"></a>

* **Descrição**: Rola até o final por uma quantidade definida de segundos.
* **Args:**
  * `type: str = "scroll_to_bottom"`
* **Exemplo**:

```bash
{\"type\": \"scroll_to_bottom\",\"timeout_s\": 10}
```

### `wait` <a href="#wait" id="wait"></a>

* **Descrição**: Aguarda uma quantidade definida de segundos.
* **Args:**
  * `type: str = "wait"`
* **Exemplo**:

```bash
{\"type\": \"wait\",\"wait_time_s\": 2}
```

#### `wait_for_element` <a href="#wait_for_element" id="wait_for_element"></a>

* **Descrição**: Aguarda o carregamento do elemento por uma quantidade definida de segundos.
* **Args:**
  * `type: str = "wait_for_element"`
  * `selector: dict`
    * `type: Enum["xpath", "css", "text"]`
    * `value: str`
  * **Exemplo:**

{% code overflow="wrap" %}

```bash
{\"type\": \"wait_for_element\",\"selector\": {\"type\": \"text\",\"value\": \"Load More Items\"},\"timeout_s\": 5}
```

{% endcode %}

#### `fetch_resource` <a href="#fetch_resource" id="fetch_resource"></a>

{% hint style="warning" %}
A URL `fetch_resource` a instrução deve ser a última instrução na lista de instruções do navegador; qualquer instrução subsequente não será executada.
{% endhint %}

* **Descrição**: Obtém a primeira ocorrência de um recurso Fetch/XHR que corresponda ao padrão definido.
* **Args:**
  * `type: str = "fetch_resource"`
  * `filter: str(RegEx expression)`
  * `on_error: Enum["error", "skip"]`
* **Exemplo:**

```bash
{\"type\": \"fetch_resource\",\"filter\": \"\/graphql\/item\/\"}
```

### Validação das instruções

Qualquer inconsistência em relação ao formato da instrução resultará em um `400` código de status e uma mensagem de erro correspondente.

Por exemplo, um payload como este:

```bash
[{\"type\": \"unsupported-wait\",\"wait_time_s\": 5}]}]
```

Resultará em:

```json
{    
    "errors": {
        "message": "Unsupported action type `unsupported-wait`, choose from 'click,fetch_resource,input,scroll,scroll_to_bottom,wait,wait_for_element'"
    }
}
```

## Códigos de status <a href="#status-codes" id="status-codes"></a>

Veja nossos códigos de resposta descritos [**aqui**](/products/pt-br/web-unblocker/response-codes.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers.oxylabs.io/products/pt-br/web-unblocker/custom-browser-instructions/browser-instructions-beta.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
