# Lista de instruções

## Argumentos gerais

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

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

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

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

* **Tipo**: `int`
* **Descrição:** Quanto tempo até que a ação seja 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**: `int`
* **Descrição:** Quanto tempo aguardar 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 para 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 aguarda 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 um 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 uma quantidade definida 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 que o elemento carregue 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 `fetch_resource` instrução deve ser a instrução final na lista de instruções do navegador; quaisquer instruções subsequentes não serão executadas.
{% endhint %}

* **Descrição**: Busca a primeira ocorrência de um recurso Fetch/XHR que corresponda ao padrão definido.
* **Args:**
  * `type: str = "fetch_resource"`
  * `filter: str(Expressão RegEx)`
  * `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'"
    }
}
```
