2021-01-07 11:46:05 -08:00
# class: Browser
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-14 15:01:39 -08:00
* extends: [EventEmitter]
2021-01-07 11:46:05 -08:00
2021-01-07 16:12:25 -08:00
A Browser is created via [`method: BrowserType.launch` ]. An example of using a [Browser] to create a [Page]:
2021-01-07 11:46:05 -08:00
```js
const { firefox } = require('playwright'); // Or 'chromium' or 'webkit'.
(async () => {
const browser = await firefox.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
```
2021-02-25 22:03:39 -08:00
```java
import com.microsoft.playwright.*;
public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType firefox = playwright.firefox()
Browser browser = firefox.launch();
Page page = browser.newPage();
page.navigate('https://example.com');
browser.close();
}
}
}
```
2021-01-14 07:48:56 -08:00
```python async
import asyncio
2023-09-13 15:18:15 +02:00
from playwright.async_api import async_playwright, Playwright
2021-01-14 07:48:56 -08:00
2023-09-13 15:18:15 +02:00
async def run(playwright: Playwright):
2021-01-14 07:48:56 -08:00
firefox = playwright.firefox
browser = await firefox.launch()
page = await browser.new_page()
await page.goto("https://example.com")
await browser.close()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
```
```python sync
2023-09-13 15:18:15 +02:00
from playwright.sync_api import sync_playwright, Playwright
2021-01-14 07:48:56 -08:00
2023-09-13 15:18:15 +02:00
def run(playwright: Playwright):
2021-01-14 07:48:56 -08:00
firefox = playwright.firefox
browser = firefox.launch()
page = browser.new_page()
page.goto("https://example.com")
browser.close()
with sync_playwright() as playwright:
run(playwright)
```
2021-05-10 20:24:54 +02:00
```csharp
using Microsoft.Playwright;
2022-04-19 21:23:26 +03:00
using var playwright = await Playwright.CreateAsync();
var firefox = playwright.Firefox;
2023-03-16 17:23:31 +01:00
var browser = await firefox.LaunchAsync(new() { Headless = false });
2022-04-19 21:23:26 +03:00
var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.bing.com");
await browser.CloseAsync();
2021-05-10 20:24:54 +02:00
```
2021-01-07 11:46:05 -08:00
## event: Browser.disconnected
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-02-25 22:22:47 -08:00
- argument: < [Browser]>
2021-01-07 11:46:05 -08:00
Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following:
* Browser application is closed or crashed.
* The [`method: Browser.close` ] method was called.
2022-06-06 18:46:08 +02:00
## method: Browser.browserType
2022-07-05 16:24:50 -08:00
* since: v1.23
2022-06-06 18:46:08 +02:00
- returns: < [BrowserType]>
Get the browser type (chromium, firefox or webkit) that the browser belongs to.
2021-01-07 11:46:05 -08:00
## async method: Browser.close
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-07 11:46:05 -08:00
In case this browser is obtained using [`method: BrowserType.launch` ], closes the browser and all of its pages (if any
were opened).
2021-01-14 07:48:56 -08:00
In case this browser is connected to, clears all created contexts belonging to this browser and disconnects from the
browser server.
2021-01-07 11:46:05 -08:00
2022-06-29 18:41:21 -07:00
:::note
This is similar to force quitting the browser. Therefore, you should call [`method: BrowserContext.close` ] on any [BrowserContext]'s you explicitly created earlier with [`method: Browser.newContext` ] **before** calling [`method: Browser.close` ].
:::
2021-01-07 11:46:05 -08:00
The [Browser] object itself is considered to be disposed and cannot be used anymore.
2023-10-16 20:32:13 -07:00
### option: Browser.close.reason
* since: v1.40
- `reason` < [string]>
The reason to be reported to the operations interrupted by the browser closure.
2021-01-07 11:46:05 -08:00
## method: Browser.contexts
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-07 11:46:05 -08:00
- returns: < [Array]< [BrowserContext]>>
Returns an array of all open browser contexts. In a newly created browser, this will return zero browser contexts.
2022-11-21 10:40:21 -08:00
**Usage**
2021-01-07 11:46:05 -08:00
```js
const browser = await pw.webkit.launch();
console.log(browser.contexts().length); // prints `0`
const context = await browser.newContext();
console.log(browser.contexts().length); // prints `1`
```
2021-02-25 22:03:39 -08:00
```java
Browser browser = pw.webkit().launch();
System.out.println(browser.contexts().size()); // prints "0"
BrowserContext context = browser.newContext();
System.out.println(browser.contexts().size()); // prints "1"
```
2021-01-14 07:48:56 -08:00
```python async
browser = await pw.webkit.launch()
2024-05-14 16:36:17 +02:00
print(len(browser.contexts)) # prints `0`
2021-01-14 07:48:56 -08:00
context = await browser.new_context()
2024-05-14 16:36:17 +02:00
print(len(browser.contexts)) # prints `1`
2021-01-14 07:48:56 -08:00
```
```python sync
browser = pw.webkit.launch()
2024-05-14 16:36:17 +02:00
print(len(browser.contexts)) # prints `0`
2021-01-14 07:48:56 -08:00
context = browser.new_context()
2024-05-14 16:36:17 +02:00
print(len(browser.contexts)) # prints `1`
2021-01-14 07:48:56 -08:00
```
2021-05-10 20:24:54 +02:00
```csharp
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Webkit.LaunchAsync();
System.Console.WriteLine(browser.Contexts.Count); // prints "0"
var context = await browser.NewContextAsync();
System.Console.WriteLine(browser.Contexts.Count); // prints "1"
```
2021-01-07 11:46:05 -08:00
## method: Browser.isConnected
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-07 11:46:05 -08:00
- returns: < [boolean]>
Indicates that the browser is connected.
2021-04-02 09:47:14 +08:00
## async method: Browser.newBrowserCDPSession
2022-07-05 16:24:50 -08:00
* since: v1.11
2021-04-02 09:47:14 +08:00
- returns: < [CDPSession]>
:::note
CDP Sessions are only supported on Chromium-based browsers.
:::
Returns the newly created browser session.
2021-01-07 11:46:05 -08:00
## async method: Browser.newContext
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-07 11:46:05 -08:00
- returns: < [BrowserContext]>
Creates a new browser context. It won't share cookies/cache with other browser contexts.
2022-06-29 18:41:21 -07:00
:::note
2022-08-09 21:47:17 +08:00
If directly using this method to create [BrowserContext]s, it is best practice to explicitly close the returned context via [`method: BrowserContext.close` ] when your code is done with the [BrowserContext],
2022-06-29 18:41:21 -07:00
and before calling [`method: Browser.close` ]. This will ensure the `context` is closed gracefully and any artifacts—like HARs and videos—are fully flushed and saved.
:::
2022-11-21 10:40:21 -08:00
**Usage**
2021-01-07 11:46:05 -08:00
```js
(async () => {
const browser = await playwright.firefox.launch(); // Or 'chromium' or 'webkit'.
// Create a new incognito browser context.
const context = await browser.newContext();
// Create a new page in a pristine context.
const page = await context.newPage();
await page.goto('https://example.com');
2022-06-29 18:41:21 -07:00
// Gracefully close up everything
await context.close();
await browser.close();
2021-01-07 11:46:05 -08:00
})();
```
2021-02-25 22:03:39 -08:00
```java
Browser browser = playwright.firefox().launch(); // Or 'chromium' or 'webkit'.
// Create a new incognito browser context.
BrowserContext context = browser.newContext();
// Create a new page in a pristine context.
Page page = context.newPage();
page.navigate('https://example.com');
2022-06-29 18:41:21 -07:00
2022-08-09 21:47:17 +08:00
// Graceful close up everything
2022-06-29 18:41:21 -07:00
context.close();
browser.close();
2021-02-25 22:03:39 -08:00
```
2021-01-14 07:48:56 -08:00
```python async
2021-01-14 11:09:44 -08:00
browser = await playwright.firefox.launch() # or "chromium" or "webkit".
# create a new incognito browser context.
context = await browser.new_context()
# create a new page in a pristine context.
page = await context.new_page()
await page.goto("https://example.com")
2022-06-29 18:41:21 -07:00
# gracefully close up everything
await context.close()
await browser.close()
2021-01-14 07:48:56 -08:00
```
```python sync
2021-01-14 11:09:44 -08:00
browser = playwright.firefox.launch() # or "chromium" or "webkit".
# create a new incognito browser context.
context = browser.new_context()
# create a new page in a pristine context.
page = context.new_page()
page.goto("https://example.com")
2022-06-29 18:41:21 -07:00
# gracefully close up everything
context.close()
browser.close()
2021-01-14 07:48:56 -08:00
```
2021-05-10 20:24:54 +02:00
```csharp
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Firefox.LaunchAsync();
// Create a new incognito browser context.
var context = await browser.NewContextAsync();
// Create a new page in a pristine context.
var page = await context.NewPageAsync(); ;
2021-05-13 11:57:02 -07:00
await page.GotoAsync("https://www.bing.com");
2022-06-29 18:41:21 -07:00
// Gracefully close up everything
await context.CloseAsync();
await browser.CloseAsync();
2021-05-10 20:24:54 +02:00
```
2022-07-05 16:24:50 -08:00
### option: Browser.newContext.-inline- = %%-shared-context-params-list-v1.8-%%
* since: v1.8
2021-01-07 11:46:05 -08:00
### option: Browser.newContext.proxy = %%-context-option-proxy-%%
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-07 11:46:05 -08:00
2024-07-12 11:42:24 +02:00
### option: Browser.newContext.clientCertificates = %%-context-option-clientCertificates-%%
* since: 1.46
2021-02-02 17:48:32 -08:00
### option: Browser.newContext.storageState = %%-js-python-context-option-storage-state-%%
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-02-02 17:48:32 -08:00
### option: Browser.newContext.storageState = %%-csharp-java-context-option-storage-state-%%
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-02-02 17:48:32 -08:00
### option: Browser.newContext.storageStatePath = %%-csharp-java-context-option-storage-state-path-%%
2022-07-05 16:24:50 -08:00
* since: v1.9
2021-01-07 11:46:05 -08:00
## async method: Browser.newPage
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-07 11:46:05 -08:00
- returns: < [Page]>
Creates a new page in a new browser context. Closing this page will close the context as well.
This is a convenience API that should only be used for the single-page scenarios and short snippets. Production code and
2021-01-14 07:48:56 -08:00
testing frameworks should explicitly create [`method: Browser.newContext` ] followed by the
[`method: BrowserContext.newPage` ] to control their exact life times.
2021-01-07 11:46:05 -08:00
2022-07-05 16:24:50 -08:00
### option: Browser.newPage.-inline- = %%-shared-context-params-list-v1.8-%%
* since: v1.8
2021-01-07 11:46:05 -08:00
### option: Browser.newPage.proxy = %%-context-option-proxy-%%
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-07 11:46:05 -08:00
2024-07-12 11:42:24 +02:00
### option: Browser.newPage.clientCertificates = %%-context-option-clientCertificates-%%
* since: 1.46
2021-02-02 17:48:32 -08:00
### option: Browser.newPage.storageState = %%-js-python-context-option-storage-state-%%
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-02-02 17:48:32 -08:00
### option: Browser.newPage.storageState = %%-csharp-java-context-option-storage-state-%%
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-02-02 17:48:32 -08:00
### option: Browser.newPage.storageStatePath = %%-csharp-java-context-option-storage-state-path-%%
2022-07-05 16:24:50 -08:00
* since: v1.9
2021-01-07 11:46:05 -08:00
2021-04-02 09:47:14 +08:00
## async method: Browser.startTracing
2022-07-05 16:24:50 -08:00
* since: v1.11
2021-05-03 22:23:03 +00:00
* langs: java, js, python
2021-04-02 09:47:14 +08:00
:::note
2021-07-19 12:43:57 +02:00
This API controls [Chromium Tracing ](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool ) which is a low-level chromium-specific debugging tool. API to control [Playwright Tracing ](../trace-viewer ) could be found [here ](./class-tracing ).
2021-04-02 09:47:14 +08:00
:::
You can use [`method: Browser.startTracing` ] and [`method: Browser.stopTracing` ] to create a trace file that can
be opened in Chrome DevTools performance panel.
2022-11-21 10:40:21 -08:00
**Usage**
2021-04-02 09:47:14 +08:00
```js
2023-06-27 11:53:53 +02:00
await browser.startTracing(page, { path: 'trace.json' });
2021-04-02 09:47:14 +08:00
await page.goto('https://www.google.com');
await browser.stopTracing();
```
2021-05-03 22:23:03 +00:00
```java
browser.startTracing(page, new Browser.StartTracingOptions()
.setPath(Paths.get("trace.json")));
page.goto('https://www.google.com');
browser.stopTracing();
```
2021-04-02 09:47:14 +08:00
```python async
await browser.start_tracing(page, path="trace.json")
await page.goto("https://www.google.com")
await browser.stop_tracing()
```
```python sync
browser.start_tracing(page, path="trace.json")
page.goto("https://www.google.com")
browser.stop_tracing()
```
### param: Browser.startTracing.page
2022-07-05 16:24:50 -08:00
* since: v1.11
2022-04-06 19:02:10 -07:00
- `page` ?< [Page]>
2021-04-02 09:47:14 +08:00
Optional, if specified, tracing includes screenshots of the given page.
### option: Browser.startTracing.path
2022-07-05 16:24:50 -08:00
* since: v1.11
2021-04-02 09:47:14 +08:00
- `path` < [path]>
A path to write the trace file to.
### option: Browser.startTracing.screenshots
2022-07-05 16:24:50 -08:00
* since: v1.11
2021-04-02 09:47:14 +08:00
- `screenshots` < [boolean]>
captures screenshots in the trace.
### option: Browser.startTracing.categories
2022-07-05 16:24:50 -08:00
* since: v1.11
2021-04-02 09:47:14 +08:00
- `categories` < [Array]< [string]>>
specify custom categories to use instead of default.
## async method: Browser.stopTracing
2022-07-05 16:24:50 -08:00
* since: v1.11
2021-05-03 22:23:03 +00:00
* langs: java, js, python
2021-04-02 09:47:14 +08:00
- returns: < [Buffer]>
:::note
2021-07-19 12:43:57 +02:00
This API controls [Chromium Tracing ](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool ) which is a low-level chromium-specific debugging tool. API to control [Playwright Tracing ](../trace-viewer ) could be found [here ](./class-tracing ).
2021-04-02 09:47:14 +08:00
:::
Returns the buffer with trace data.
2021-01-07 11:46:05 -08:00
## method: Browser.version
2022-07-05 16:24:50 -08:00
* since: v1.8
2021-01-07 11:46:05 -08:00
- returns: < [string]>
Returns the browser version.