# Browser instructions (Beta)

When using Custom Browser Instructions, you can define your own specific browser instructions that are executed when rendering JavaScript.

{% hint style="success" %}
Generate **Browser instructions automatically** in the [**Web Scraper API Playground**](https://dashboard.oxylabs.io/?route=/api-playground) on the Oxylabs dashboard. Set up browser actions, test them, and export the generated instructions in JSON format.&#x20;
{% endhint %}

### How to use it?

To use browser instructions, provide a set of `browser_instructions` when creating a job.

Let’s say you want to search for the term `pizza boxes` in a website.

<figure><img src="https://63892162-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>

An example job parameters would look as follows:

{% 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 %}

**Step 1.** You must provide the `x-oxylabs-render: html` parameter.

**Step 2.** Browser instructions should be described in the `x-oxylabs-browser_instructions` field.

{% hint style="info" %}
The browser instructions provided as the header value must be JSON-escaped and contain no extra spaces.
{% endhint %}

The sample browser instructions above specifies that the aim is to enter a search term `pizza boxes` into a search field, click `search` button and wait for 5 seconds for content to load.

The scraped result should look as follows:

```html
<!doctype html><html>
Content after executing the instructions      
</html>
```

Scraped HTML should look like this:

<figure><img src="https://63892162-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>

#### Fetching browser resources <a href="#fetching-browser-resources" id="fetching-browser-resources"></a>

We provide a standalone browser instruction for fetching browser resources.

The function is defined here:

Using `fetch_resource` will result in job returning the first occurrence of a Fetch/XHR resource that matches the format provided instead of the HTML that is being targeted.

Let’s say we want to target a GraphQL resource that is fetched when visiting a product page organically in the browser. We will provide job information as such:

{% 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 %}

These instructions will result in a result as such:

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

### List of supported browser instructions <a href="#list-of-supported-browser-instructions" id="list-of-supported-browser-instructions"></a>

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

### Status codes <a href="#status-codes" id="status-codes"></a>

See our response codes outlined [**here**](https://developers.oxylabs.io/advanced-proxy-solutions/web-unblocker/response-codes).

Status codes in regards to instructions validation are documented [**here**](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/features/js-rendering-and-browser-control/browser-instructions/list-of-instructions#instructions-validation).
