--- sidebar_label: Page.$eval --- # Page.$eval() method This method finds the first element within the page that matches the selector and passes the result as the first argument to the `pageFunction`. #### Signature: ```typescript class Page { $eval< Selector extends string, Params extends unknown[], Func extends EvaluateFuncWith, Params> = EvaluateFuncWith< NodeFor, Params >, >( selector: Selector, pageFunction: Func | string, ...args: Params ): Promise>>; } ``` ## Parameters
Parameter Type Description
selector Selector [selector](https://pptr.dev/guides/page-interactions#query-selectors) to query page for. [CSS selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) can be passed as-is and a [Puppeteer-specific seletor syntax](https://pptr.dev/guides/page-interactions#p-selectors) allows quering by [text](https://pptr.dev/guides/page-interactions#text-selectors--p-text), [a11y role and name](https://pptr.dev/guides/page-interactions#aria-selectors--p-aria), and [xpath](https://pptr.dev/guides/page-interactions#xpath-selectors--p-xpath) and [combining these queries across shadow roots](https://pptr.dev/guides/page-interactions#-and--combinators). Alternatively, you can specify a selector type using a prefix [prefix](https://pptr.dev/guides/page-interactions#built-in-selectors).
pageFunction Func \| string the function to be evaluated in the page context. Will be passed the result of the element matching the selector as its first argument.
args Params any additional arguments to pass through to `pageFunction`.
**Returns:** Promise<Awaited<ReturnType<Func>>> The result of calling `pageFunction`. If it returns an element it is wrapped in an [ElementHandle](./puppeteer.elementhandle.md), else the raw value itself is returned. ## Remarks If no element is found matching `selector`, the method will throw an error. If `pageFunction` returns a promise `$eval` will wait for the promise to resolve and then return its value. ## Example 1 ```ts const searchValue = await page.$eval('#search', el => el.value); const preloadHref = await page.$eval('link[rel=preload]', el => el.href); const html = await page.$eval('.main-container', el => el.outerHTML); ``` If you are using TypeScript, you may have to provide an explicit type to the first argument of the `pageFunction`. By default it is typed as `Element`, but you may need to provide a more specific sub-type: ## Example 2 ```ts // if you don't provide HTMLInputElement here, TS will error // as `value` is not on `Element` const searchValue = await page.$eval( '#search', (el: HTMLInputElement) => el.value ); ``` The compiler should be able to infer the return type from the `pageFunction` you provide. If it is unable to, you can use the generic type to tell the compiler what return type you expect from `$eval`: ## Example 3 ```ts // The compiler can infer the return type in this case, but if it can't // or if you want to be more explicit, provide it as the generic type. const searchValue = await page.$eval( '#search', (el: HTMLInputElement) => el.value ); ```