# class: Worker The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). `worker` event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the worker is gone. ```js page.on('worker', worker => { console.log('Worker created: ' + worker.url()); worker.on('close', worker => console.log('Worker destroyed: ' + worker.url())); }); console.log('Current workers:'); for (const worker of page.workers()) console.log(' ' + worker.url()); ``` ```py def handle_worker(worker): print("worker created: " + worker.url) worker.on("close", lambda: print("worker destroyed: " + worker.url)) page.on('worker', handle_worker) print("current workers:") for worker in page.workers: print(" " + worker.url) ``` ## event: Worker.close - type: <[Worker]> Emitted when this dedicated [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) is terminated. ## async method: Worker.evaluate - returns: <[Serializable]> Returns the return value of [`param: expression`]. If the function passed to the [`method: Worker.evaluate`] returns a [Promise], then [`method: Worker.evaluate`] would wait for the promise to resolve and return its value. If the function passed to the [`method: Worker.evaluate`] returns a non-[Serializable] value, then [`method: Worker.evaluate`] returns `undefined`. Playwright also supports transferring some additional values that are not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`. ### param: Worker.evaluate.expression = %%-evaluate-expression-%% ### param: Worker.evaluate.arg - `arg` <[EvaluationArgument]> Optional argument to pass to [`param: expression`]. ## async method: Worker.evaluateHandle - returns: <[JSHandle]> Returns the return value of [`param: expression`] as a [JSHandle]. The only difference between [`method: Worker.evaluate`] and [`method: Worker.evaluateHandle`] is that [`method: Worker.evaluateHandle`] returns [JSHandle]. If the function passed to the [`method: Worker.evaluateHandle`] returns a [Promise], then [`method: Worker.evaluateHandle`] would wait for the promise to resolve and return its value. ### param: Worker.evaluateHandle.expression = %%-evaluate-expression-%% ### param: Worker.evaluateHandle.arg - `arg` <[EvaluationArgument]> Optional argument to pass to [`param: expression`]. ## method: Worker.url - returns: <[string]> ## method: Worker.waitForClose * langs: csharp, java - returns: <[Worker]> Performs action and waits for the Worker to close. ### option: Worker.waitForClose.timeout = %%-wait-for-event-timeout-%%