# Instrucciones del navegador

Puedes definir tus propias instrucciones del navegador que se ejecutan al renderizar JavaScript.

{% hint style="success" %}
La forma más sencilla de configurar las instrucciones del navegador es usando el generador visual de instrucciones del navegador con IA en el [Web Scraper API Playground](https://dashboard.oxylabs.io/?route=/api-playground). Lee sobre ello [aquí](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api-playground/oxycopilot#browser-instruction-builder).
{% endhint %}

### Uso

Para usar las instrucciones del navegador, proporciona un conjunto de `browser_instructions` al crear un trabajo.

Digamos que quieres buscar el término `pizza boxes` en un sitio web.

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FVVCJxliUYBEPcG34IThU%2Fbi_1.png?alt=media&#x26;token=1f689105-300d-49ce-a38a-145fd925f54f" alt=""><figcaption></figcaption></figure>

Un ejemplo de parámetros del trabajo se vería así:

```json
{
    "source": "universal",
    "url": "https://www.ebay.com/",
    "render": "html",
    "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
        }
    ]
}
```

**Paso 1.** Debes proporcionar el `"render": "html"` parámetro.

**Paso 2.** Las instrucciones del navegador deben describirse en el campo `"browser_instructions"` .

Las instrucciones de ejemplo del navegador anteriores especifican que el objetivo es introducir un término de búsqueda `pizza boxes` en un campo de búsqueda, hacer clic en el botón de `búsqueda` y esperar 5 segundos a que el contenido cargue.

El resultado extraído debería verse así:

```json
{
  "results": [
    {
      "content": "<!doctype html><html>
        Contenido después de ejecutar las instrucciones      
      </html>",
      "created_at": "2023-10-11 11:35:23",
      "updated_at": "2023-10-11 11:36:08",
      "page": 1,
      "url": "https://www.ebay.com/",
      "job_id": "7117835067442906113",
      "status_code": 200
    }
  ]
}
```

El HTML extraído debería verse así:

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2Fskb19h4I9wV9pBJSQIP6%2Fbi_2.png?alt=media&#x26;token=36c0fa1e-7bb6-4bf6-8047-ab9d9bbd20dd" alt=""><figcaption></figcaption></figure>

#### Obtención de recursos del navegador <a href="#fetching-browser-resources" id="fetching-browser-resources"></a>

Proporcionamos una instrucción independiente del navegador para obtener recursos del navegador.

La función se define aquí:

Usar `fetch_resource` hará que el trabajo devuelva la primera aparición de un recurso Fetch/XHR que coincida con el formato proporcionado en lugar del HTML que se está apuntando.

Digamos que queremos apuntar a un recurso GraphQL que se obtiene al visitar una página de producto de forma orgánica en el navegador. Proporcionaremos la información del trabajo así:

```json
{
    "source": "universal",
    "url": "https://www.example.com/product-page/123",
    "render": "html",
    "browser_instructions": [
        {
            "type": "fetch_resource",
            "filter": "/graphql/product-info/123"
        }
    ]
}
```

Estas instrucciones darán como resultado algo así:

```json
{
  "results": [
    {
      "content": "{'product_id': 123, 'description': '', 'price': 123}",
      "created_at": "2023-10-11 11:35:23",
      "updated_at": "2023-10-11 11:36:08",
      "page": 1,
      "url": "https://example.com/v1/graphql/product-info/123/",
      "job_id": "7117835067442906114",
      "status_code": 200
    }
  ]
}
```

### Lista de instrucciones del navegador compatibles <a href="#list-of-supported-browser-instructions" id="list-of-supported-browser-instructions"></a>

{% content-ref url="browser-instructions/list-of-instructions" %}
[list-of-instructions](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/features/js-rendering-and-browser-control/browser-instructions/list-of-instructions)
{% endcontent-ref %}

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

Consulta nuestros códigos de respuesta descritos [**aquí**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/response-codes).

Los códigos de estado relacionados con la validación de instrucciones están documentados [**aquí**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/features/js-rendering-and-browser-control/list-of-instructions#instructions-validation).

### Errores y advertencias

Si hay un error o una advertencia como resultado de tus acciones de navegación, la encontrarás en el resultado bajo las claves `browser_instructions_error` o `browser_instructions_warnings`. Por ejemplo, si has enviado las siguientes instrucciones del navegador y el xpath esperado no se encuentra en la página, el resultado incluirá una advertencia.

`browser_instructions`:

```json
[
    {
        "type": "input", 
        "selector": {
            "type": "xpath",
            "value": "//input[@type='search']"
        },
        "value": "oxylabs"
    }
]
```

Resultados:

```json
{
  "results": [
    {
      "content": "<!doctype html><html>
        Contenido después de ejecutar las instrucciones      
      </html>",
      "created_at": "2023-10-11 11:35:23",
      "updated_at": "2023-10-11 11:36:08",
      "browser_instructions_warnings": [
        {
          "action_type": "click",
          "msg": "No se pudo encontrar el tipo de selector `xpath` con el valor `//input[@type=search]` en la página."
        },
      ],
      "page": 1,
      "url": "https://example.com",
      "job_id": "7117835067442906113",
      "status_code": 200
    }
  ]
}

```

| Posibles errores y advertencias                                                                          |
| -------------------------------------------------------------------------------------------------------- |
| Ocurrió un error inesperado al convertir las instrucciones del navegador en acciones.                    |
| Ocurrió un error inesperado al ejecutar `{action.type}` instrucciones del navegador.                     |
| La acción `{action.type}` agotó el tiempo de espera.                                                     |
| No se pudo encontrar el tipo de selector `{selector.type}` con el valor `{selector.value}` en la página. |
