# browser_click

## Browser Click

Click on an element using CSS selector, XY coordinates, or natural language description. Supports semantic element finding using AI - describe what you want to click (e.g., 'login button', 'search icon') and the system will locate the right element. Simulates a real mouse click with proper event dispatch. Optionally hold the mouse button for press-and-hold interactions using `hold_ms`.

## Usage Example

### CURL

```bash
POST `/api/execute/browser_click`

curl -X POST \
 -H "Authorization: Bearer <token>" \
 -H "Content-Type: application/json" \
 -d '{
"context_id": "ctx_000001",
"selector": "#element-id"
}' \
http://localhost:8080/api/execute/browser_click
```

### Python SDK

```python
import asyncio
from owl_browser import OwlBrowser, RemoteConfig

# Async usage
async with OwlBrowser(config) as browser:
    context = await browser.create_context()
    context_id = context["context_id"]
    await browser.click(
        context_id=context_id,
        selector="#element-id"
    )
```

### Node.js SDK

```javascript
import { OwlBrowser } from '@olib-ai/owl-browser-sdk';

// Async usage
const ctx = await browser.createContext();
const contextId = ctx.context_id;
await browser.click({
    context_id: contextId,
    selector: '#element-id'
});
```

## Parameters

### Required

- `context_id` **string** required
    - The unique identifier of the browser context (e.g., 'ctx_000001')
- `selector` **string** required
    - Target element to click. Accepts: CSS selector (e.g., '#submit-btn', '.nav-link'), XY coordinates as 'Xx Y' (e.g., '100x200'), or natural language description (e.g., 'login button', 'search icon'). Semantic descriptions use AI to find the element

### Optional

- `hold_ms` **string**
    - Duration in milliseconds to hold the mouse button down before releasing. Use for press-and-hold interactions (e.g., long press menus, drag initiation). Default: 0 (immediate click)
- `index` **string**
    - When multiple elements match the selector, click the Nth element (0-based). Uses querySelectorAll()[index] instead of querySelector(). Default: -1 (first match)

## Response

Returns a JSON object with the operation result.

```
{
  "success": true,
  "result": <value>
}
```
