--- sidebar_label: ElementHandle --- # ElementHandle class ElementHandle represents an in-page DOM element. **Signature:** ```typescript export declare class ElementHandle extends JSHandle ``` **Extends:** [JSHandle](./puppeteer.jshandle.md)<ElementType> ## Remarks ElementHandles can be created with the [Page.$()](./puppeteer.page._.md) method. ```ts const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); const hrefElement = await page.$('a'); await hrefElement.click(); // ... })(); ``` ElementHandle prevents the DOM element from being garbage-collected unless the handle is [disposed](./puppeteer.jshandle.dispose.md). ElementHandles are auto-disposed when their origin frame gets navigated. ElementHandle instances can be used as arguments in [Page.$eval()](./puppeteer.page._eval.md) and [Page.evaluate()](./puppeteer.page.evaluate.md) methods. If you're using TypeScript, ElementHandle takes a generic argument that denotes the type of element the handle is holding within. For example, if you have a handle to a `