2021-01-07 11:46:05 -08:00
|
|
|
# class: BrowserContext
|
2021-01-14 15:01:39 -08:00
|
|
|
* extends: [EventEmitter]
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
BrowserContexts provide a way to operate multiple independent browser sessions.
|
|
|
|
|
|
|
|
If a page opens another page, e.g. with a `window.open` call, the popup will belong to the parent page's browser
|
|
|
|
context.
|
|
|
|
|
|
|
|
Playwright allows creation of "incognito" browser contexts with `browser.newContext()` method. "Incognito" browser
|
|
|
|
contexts don't write any browsing data to disk.
|
|
|
|
|
|
|
|
```js
|
|
|
|
// Create a new incognito browser context
|
|
|
|
const context = await browser.newContext();
|
|
|
|
// Create a new page inside context.
|
|
|
|
const page = await context.newPage();
|
|
|
|
await page.goto('https://example.com');
|
|
|
|
// Dispose context once it's no longer needed.
|
|
|
|
await context.close();
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
# create a new incognito browser context
|
|
|
|
context = await browser.new_context()
|
|
|
|
# create a new page inside context.
|
|
|
|
page = await context.new_page()
|
|
|
|
await page.goto("https://example.com")
|
|
|
|
# dispose context once it"s no longer needed.
|
|
|
|
await context.close()
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
# create a new incognito browser context
|
|
|
|
context = browser.new_context()
|
|
|
|
# create a new page inside context.
|
|
|
|
page = context.new_page()
|
|
|
|
page.goto("https://example.com")
|
|
|
|
# dispose context once it"s no longer needed.
|
|
|
|
context.close()
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
## event: BrowserContext.close
|
|
|
|
|
|
|
|
Emitted when Browser context gets closed. This might happen because of one of the following:
|
|
|
|
* Browser context is closed.
|
|
|
|
* Browser application is closed or crashed.
|
|
|
|
* The [`method: Browser.close`] method was called.
|
|
|
|
|
|
|
|
## event: BrowserContext.page
|
|
|
|
- type: <[Page]>
|
|
|
|
|
|
|
|
The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
|
|
|
|
also fire for popup pages. See also [`event: Page.popup`] to receive events about popups relevant to a specific page.
|
|
|
|
|
|
|
|
The earliest moment that page is available is when it has navigated to the initial url. For example, when opening a
|
|
|
|
popup with `window.open('http://example.com')`, this event will fire when the network request to "http://example.com" is
|
|
|
|
done and its response has started loading in the popup.
|
|
|
|
|
|
|
|
```js
|
|
|
|
const [page] = await Promise.all([
|
|
|
|
context.waitForEvent('page'),
|
|
|
|
page.click('a[target=_blank]'),
|
|
|
|
]);
|
|
|
|
console.log(await page.evaluate('location.href'));
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
async with context.expect_page() as page_info:
|
|
|
|
await page.click("a[target=_blank]"),
|
|
|
|
page = await page_info.value
|
|
|
|
print(await page.evaluate("location.href"))
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
with context.expect_page() as page_info:
|
|
|
|
page.click("a[target=_blank]"),
|
|
|
|
page = page_info.value
|
|
|
|
print(page.evaluate("location.href"))
|
|
|
|
```
|
|
|
|
|
2021-01-12 12:14:27 -08:00
|
|
|
:::note
|
2021-01-14 07:48:56 -08:00
|
|
|
Use [`method: Page.waitForLoadState`] to wait until the page gets to a particular state (you should not need it in most
|
|
|
|
cases).
|
2021-01-12 12:14:27 -08:00
|
|
|
:::
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
## async method: BrowserContext.addCookies
|
|
|
|
|
|
|
|
Adds cookies into this browser context. All pages within this context will have these cookies installed. Cookies can be
|
|
|
|
obtained via [`method: BrowserContext.cookies`].
|
|
|
|
|
|
|
|
```js
|
|
|
|
await browserContext.addCookies([cookieObject1, cookieObject2]);
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
await browser_context.add_cookies([cookie_object1, cookie_object2])
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
browser_context.add_cookies([cookie_object1, cookie_object2])
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
### param: BrowserContext.addCookies.cookies
|
|
|
|
- `cookies` <[Array]<[Object]>>
|
2021-01-10 18:18:35 -08:00
|
|
|
- `name` <[string]>
|
|
|
|
- `value` <[string]>
|
2021-01-07 11:46:05 -08:00
|
|
|
- `url` <[string]> either url or domain / path are required. Optional.
|
|
|
|
- `domain` <[string]> either url or domain / path are required Optional.
|
|
|
|
- `path` <[string]> either url or domain / path are required Optional.
|
|
|
|
- `expires` <[float]> Unix time in seconds. Optional.
|
|
|
|
- `httpOnly` <[boolean]> Optional.
|
|
|
|
- `secure` <[boolean]> Optional.
|
|
|
|
- `sameSite` <"Strict"|"Lax"|"None"> Optional.
|
|
|
|
|
|
|
|
## async method: BrowserContext.addInitScript
|
|
|
|
|
|
|
|
Adds a script which would be evaluated in one of the following scenarios:
|
|
|
|
* Whenever a page is created in the browser context or is navigated.
|
2021-01-14 07:48:56 -08:00
|
|
|
* Whenever a child frame is attached or navigated in any page in the browser context. In this case, the script is
|
|
|
|
evaluated in the context of the newly attached frame.
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
The script is evaluated after the document was created but before any of its scripts were run. This is useful to amend
|
|
|
|
the JavaScript environment, e.g. to seed `Math.random`.
|
|
|
|
|
|
|
|
An example of overriding `Math.random` before the page loads:
|
|
|
|
|
2021-01-14 18:19:02 -08:00
|
|
|
```js browser
|
2021-01-07 11:46:05 -08:00
|
|
|
// preload.js
|
|
|
|
Math.random = () => 42;
|
|
|
|
```
|
|
|
|
|
|
|
|
```js
|
|
|
|
// In your playwright script, assuming the preload.js file is in same directory.
|
|
|
|
await browserContext.addInitScript({
|
|
|
|
path: 'preload.js'
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
# in your playwright script, assuming the preload.js file is in same directory.
|
|
|
|
await browser_context.add_init_script(path="preload.js")
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
# in your playwright script, assuming the preload.js file is in same directory.
|
|
|
|
browser_context.add_init_script(path="preload.js")
|
|
|
|
```
|
|
|
|
|
2021-01-12 12:14:27 -08:00
|
|
|
:::note
|
|
|
|
The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
|
2021-01-07 11:46:05 -08:00
|
|
|
[`method: Page.addInitScript`] is not defined.
|
2021-01-12 12:14:27 -08:00
|
|
|
:::
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### param: BrowserContext.addInitScript.script
|
2021-01-07 16:12:25 -08:00
|
|
|
* langs: js
|
2021-01-07 11:46:05 -08:00
|
|
|
- `script` <[function]|[string]|[Object]>
|
2021-01-14 07:48:56 -08:00
|
|
|
- `path` <[path]> Path to the JavaScript file. If `path` is a relative path, then it is resolved relative to the
|
|
|
|
current working directory. Optional.
|
2021-01-07 11:46:05 -08:00
|
|
|
- `content` <[string]> Raw script content. Optional.
|
|
|
|
|
|
|
|
Script to be evaluated in all pages in the browser context.
|
|
|
|
|
|
|
|
### param: BrowserContext.addInitScript.arg
|
2021-01-07 16:12:25 -08:00
|
|
|
* langs: js
|
2021-01-07 11:46:05 -08:00
|
|
|
- `arg` <[Serializable]>
|
|
|
|
|
|
|
|
Optional argument to pass to [`param: script`] (only supported when passing a function).
|
|
|
|
|
|
|
|
## method: BrowserContext.browser
|
|
|
|
- returns: <[null]|[Browser]>
|
|
|
|
|
|
|
|
Returns the browser instance of the context. If it was launched as a persistent context null gets returned.
|
|
|
|
|
|
|
|
## async method: BrowserContext.clearCookies
|
|
|
|
|
|
|
|
Clears context cookies.
|
|
|
|
|
|
|
|
## async method: BrowserContext.clearPermissions
|
|
|
|
|
|
|
|
Clears all permission overrides for the browser context.
|
|
|
|
|
|
|
|
```js
|
|
|
|
const context = await browser.newContext();
|
|
|
|
await context.grantPermissions(['clipboard-read']);
|
|
|
|
// do stuff ..
|
|
|
|
context.clearPermissions();
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
context = await browser.new_context()
|
|
|
|
await context.grant_permissions(["clipboard-read"])
|
|
|
|
# do stuff ..
|
|
|
|
context.clear_permissions()
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
context = browser.new_context()
|
|
|
|
context.grant_permissions(["clipboard-read"])
|
|
|
|
# do stuff ..
|
|
|
|
context.clear_permissions()
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
## async method: BrowserContext.close
|
|
|
|
|
|
|
|
Closes the browser context. All the pages that belong to the browser context will be closed.
|
|
|
|
|
2021-01-12 12:14:27 -08:00
|
|
|
:::note
|
|
|
|
The default browser context cannot be closed.
|
|
|
|
:::
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
## async method: BrowserContext.cookies
|
|
|
|
- returns: <[Array]<[Object]>>
|
|
|
|
- `name` <[string]>
|
|
|
|
- `value` <[string]>
|
|
|
|
- `domain` <[string]>
|
|
|
|
- `path` <[string]>
|
|
|
|
- `expires` <[float]> Unix time in seconds.
|
|
|
|
- `httpOnly` <[boolean]>
|
|
|
|
- `secure` <[boolean]>
|
|
|
|
- `sameSite` <"Strict"|"Lax"|"None">
|
|
|
|
|
|
|
|
If no URLs are specified, this method returns all cookies. If URLs are specified, only cookies that affect those URLs
|
|
|
|
are returned.
|
|
|
|
|
|
|
|
### param: BrowserContext.cookies.urls
|
|
|
|
- `urls` <[string]|[Array]<[string]>>
|
|
|
|
|
|
|
|
Optional list of URLs.
|
|
|
|
|
|
|
|
## async method: BrowserContext.exposeBinding
|
|
|
|
|
|
|
|
The method adds a function called [`param: name`] on the `window` object of every frame in every page in the context.
|
2021-01-14 07:48:56 -08:00
|
|
|
When called, the function executes [`param: callback`] and returns a [Promise] which resolves to the return value of
|
|
|
|
[`param: callback`]. If the [`param: callback`] returns a [Promise], it will be awaited.
|
2021-01-07 11:46:05 -08:00
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
The first argument of the [`param: callback`] function contains information about the caller: `{ browserContext:
|
|
|
|
BrowserContext, page: Page, frame: Frame }`.
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
See [`method: Page.exposeBinding`] for page-only version.
|
|
|
|
|
|
|
|
An example of exposing page URL to all frames in all pages in the context:
|
|
|
|
|
|
|
|
```js
|
|
|
|
const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
|
|
|
|
|
|
|
|
(async () => {
|
|
|
|
const browser = await webkit.launch({ headless: false });
|
|
|
|
const context = await browser.newContext();
|
|
|
|
await context.exposeBinding('pageURL', ({ page }) => page.url());
|
|
|
|
const page = await context.newPage();
|
|
|
|
await page.setContent(`
|
|
|
|
<script>
|
|
|
|
async function onClick() {
|
|
|
|
document.querySelector('div').textContent = await window.pageURL();
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<button onclick="onClick()">Click me</button>
|
|
|
|
<div></div>
|
|
|
|
`);
|
|
|
|
await page.click('button');
|
|
|
|
})();
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
import asyncio
|
|
|
|
from playwright.async_api import async_playwright
|
|
|
|
|
|
|
|
async def run(playwright):
|
|
|
|
webkit = playwright.webkit
|
|
|
|
browser = await webkit.launch(headless=false)
|
|
|
|
context = await browser.new_context()
|
|
|
|
await context.expose_binding("pageURL", lambda source: source["page"].url)
|
|
|
|
page = await context.new_page()
|
|
|
|
await page.set_content("""
|
|
|
|
<script>
|
|
|
|
async function onClick() {
|
|
|
|
document.querySelector('div').textContent = await window.pageURL();
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<button onclick="onClick()">Click me</button>
|
|
|
|
<div></div>
|
|
|
|
""")
|
|
|
|
await page.click("button")
|
|
|
|
|
|
|
|
async def main():
|
|
|
|
async with async_playwright() as playwright:
|
|
|
|
await run(playwright)
|
|
|
|
asyncio.run(main())
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
from playwright.sync_api import sync_playwright
|
|
|
|
|
|
|
|
def run(playwright):
|
|
|
|
webkit = playwright.webkit
|
|
|
|
browser = webkit.launch(headless=false)
|
|
|
|
context = browser.new_context()
|
|
|
|
context.expose_binding("pageURL", lambda source: source["page"].url)
|
|
|
|
page = context.new_page()
|
|
|
|
page.set_content("""
|
|
|
|
<script>
|
|
|
|
async function onClick() {
|
|
|
|
document.querySelector('div').textContent = await window.pageURL();
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<button onclick="onClick()">Click me</button>
|
|
|
|
<div></div>
|
|
|
|
""")
|
|
|
|
page.click("button")
|
|
|
|
|
|
|
|
with sync_playwright() as playwright:
|
|
|
|
run(playwright)
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
An example of passing an element handle:
|
|
|
|
|
|
|
|
```js
|
|
|
|
await context.exposeBinding('clicked', async (source, element) => {
|
|
|
|
console.log(await element.textContent());
|
|
|
|
}, { handle: true });
|
|
|
|
await page.setContent(`
|
|
|
|
<script>
|
|
|
|
document.addEventListener('click', event => window.clicked(event.target));
|
|
|
|
</script>
|
|
|
|
<div>Click me</div>
|
|
|
|
<div>Or click me</div>
|
|
|
|
`);
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
async def print(source, element):
|
|
|
|
print(await element.text_content())
|
|
|
|
|
|
|
|
await context.expose_binding("clicked", print, handle=true)
|
|
|
|
await page.set_content("""
|
|
|
|
<script>
|
|
|
|
document.addEventListener('click', event => window.clicked(event.target));
|
|
|
|
</script>
|
|
|
|
<div>Click me</div>
|
|
|
|
<div>Or click me</div>
|
|
|
|
""")
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
def print(source, element):
|
|
|
|
print(element.text_content())
|
|
|
|
|
|
|
|
context.expose_binding("clicked", print, handle=true)
|
|
|
|
page.set_content("""
|
|
|
|
<script>
|
|
|
|
document.addEventListener('click', event => window.clicked(event.target));
|
|
|
|
</script>
|
|
|
|
<div>Click me</div>
|
|
|
|
<div>Or click me</div>
|
|
|
|
""")
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
### param: BrowserContext.exposeBinding.name
|
|
|
|
- `name` <[string]>
|
|
|
|
|
|
|
|
Name of the function on the window object.
|
|
|
|
|
|
|
|
### param: BrowserContext.exposeBinding.callback
|
|
|
|
- `callback` <[function]>
|
|
|
|
|
|
|
|
Callback function that will be called in the Playwright's context.
|
|
|
|
|
|
|
|
### option: BrowserContext.exposeBinding.handle
|
|
|
|
- `handle` <[boolean]>
|
|
|
|
|
|
|
|
Whether to pass the argument as a handle, instead of passing by value. When passing a handle, only one argument is
|
|
|
|
supported. When passing by value, multiple arguments are supported.
|
|
|
|
|
|
|
|
## async method: BrowserContext.exposeFunction
|
|
|
|
|
|
|
|
The method adds a function called [`param: name`] on the `window` object of every frame in every page in the context.
|
2021-01-14 07:48:56 -08:00
|
|
|
When called, the function executes [`param: callback`] and returns a [Promise] which resolves to the return value of
|
|
|
|
[`param: callback`].
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
If the [`param: callback`] returns a [Promise], it will be awaited.
|
|
|
|
|
|
|
|
See [`method: Page.exposeFunction`] for page-only version.
|
|
|
|
|
|
|
|
An example of adding an `md5` function to all pages in the context:
|
|
|
|
|
|
|
|
```js
|
|
|
|
const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
|
|
|
|
const crypto = require('crypto');
|
|
|
|
|
|
|
|
(async () => {
|
|
|
|
const browser = await webkit.launch({ headless: false });
|
|
|
|
const context = await browser.newContext();
|
|
|
|
await context.exposeFunction('md5', text => crypto.createHash('md5').update(text).digest('hex'));
|
|
|
|
const page = await context.newPage();
|
|
|
|
await page.setContent(`
|
|
|
|
<script>
|
|
|
|
async function onClick() {
|
|
|
|
document.querySelector('div').textContent = await window.md5('PLAYWRIGHT');
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<button onclick="onClick()">Click me</button>
|
|
|
|
<div></div>
|
|
|
|
`);
|
|
|
|
await page.click('button');
|
|
|
|
})();
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
import asyncio
|
|
|
|
import hashlib
|
|
|
|
from playwright.async_api import async_playwright
|
|
|
|
|
|
|
|
async def sha1(text):
|
|
|
|
m = hashlib.sha1()
|
|
|
|
m.update(bytes(text, "utf8"))
|
|
|
|
return m.hexdigest()
|
|
|
|
|
|
|
|
|
|
|
|
async def run(playwright):
|
|
|
|
webkit = playwright.webkit
|
|
|
|
browser = await webkit.launch(headless=False)
|
|
|
|
context = await browser.new_context()
|
|
|
|
await context.expose_function("sha1", sha1)
|
|
|
|
page = await context.new_page()
|
|
|
|
await page.set_content("""
|
|
|
|
<script>
|
|
|
|
async function onClick() {
|
|
|
|
document.querySelector('div').textContent = await window.sha1('PLAYWRIGHT');
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<button onclick="onClick()">Click me</button>
|
|
|
|
<div></div>
|
|
|
|
""")
|
|
|
|
await page.click("button")
|
|
|
|
|
|
|
|
async def main():
|
|
|
|
async with async_playwright() as playwright:
|
|
|
|
await run(playwright)
|
|
|
|
asyncio.run(main())
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
import hashlib
|
|
|
|
from playwright.sync_api import sync_playwright
|
|
|
|
|
|
|
|
def sha1(text):
|
|
|
|
m = hashlib.sha1()
|
|
|
|
m.update(bytes(text, "utf8"))
|
|
|
|
return m.hexdigest()
|
|
|
|
|
|
|
|
|
|
|
|
def run(playwright):
|
|
|
|
webkit = playwright.webkit
|
|
|
|
browser = webkit.launch(headless=False)
|
|
|
|
context = browser.new_context()
|
|
|
|
context.expose_function("sha1", sha1)
|
|
|
|
page = context.new_page()
|
|
|
|
page.expose_function("sha1", sha1)
|
|
|
|
page.set_content("""
|
|
|
|
<script>
|
|
|
|
async function onClick() {
|
|
|
|
document.querySelector('div').textContent = await window.sha1('PLAYWRIGHT');
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<button onclick="onClick()">Click me</button>
|
|
|
|
<div></div>
|
|
|
|
""")
|
|
|
|
page.click("button")
|
|
|
|
|
|
|
|
with sync_playwright() as playwright:
|
|
|
|
run(playwright)
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
### param: BrowserContext.exposeFunction.name
|
|
|
|
- `name` <[string]>
|
|
|
|
|
|
|
|
Name of the function on the window object.
|
|
|
|
|
|
|
|
### param: BrowserContext.exposeFunction.callback
|
|
|
|
- `callback` <[function]>
|
|
|
|
|
|
|
|
Callback function that will be called in the Playwright's context.
|
|
|
|
|
|
|
|
## async method: BrowserContext.grantPermissions
|
|
|
|
|
|
|
|
Grants specified permissions to the browser context. Only grants corresponding permissions to the given origin if
|
|
|
|
specified.
|
|
|
|
|
|
|
|
### param: BrowserContext.grantPermissions.permissions
|
|
|
|
- `permissions` <[Array]<[string]>>
|
|
|
|
|
|
|
|
A permission or an array of permissions to grant. Permissions can be one of the following values:
|
2021-01-14 07:48:56 -08:00
|
|
|
* `'geolocation'`
|
|
|
|
* `'midi'`
|
|
|
|
* `'midi-sysex'` (system-exclusive midi)
|
|
|
|
* `'notifications'`
|
|
|
|
* `'push'`
|
|
|
|
* `'camera'`
|
|
|
|
* `'microphone'`
|
|
|
|
* `'background-sync'`
|
|
|
|
* `'ambient-light-sensor'`
|
|
|
|
* `'accelerometer'`
|
|
|
|
* `'gyroscope'`
|
|
|
|
* `'magnetometer'`
|
|
|
|
* `'accessibility-events'`
|
|
|
|
* `'clipboard-read'`
|
|
|
|
* `'clipboard-write'`
|
|
|
|
* `'payment-handler'`
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### option: BrowserContext.grantPermissions.origin
|
|
|
|
- `origin` <[string]>
|
|
|
|
|
|
|
|
The [origin] to grant permissions to, e.g. "https://example.com".
|
|
|
|
|
|
|
|
## async method: BrowserContext.newPage
|
|
|
|
- returns: <[Page]>
|
|
|
|
|
|
|
|
Creates a new page in the browser context.
|
|
|
|
|
|
|
|
## method: BrowserContext.pages
|
|
|
|
- returns: <[Array]<[Page]>>
|
|
|
|
|
|
|
|
Returns all open pages in the context. Non visible pages, such as `"background_page"`, will not be listed here. You can
|
|
|
|
find them using [`method: ChromiumBrowserContext.backgroundPages`].
|
|
|
|
|
|
|
|
## async method: BrowserContext.route
|
|
|
|
|
|
|
|
Routing provides the capability to modify network requests that are made by any page in the browser context. Once route
|
|
|
|
is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.
|
|
|
|
|
|
|
|
An example of a naïve handler that aborts all image requests:
|
|
|
|
|
|
|
|
```js
|
|
|
|
const context = await browser.newContext();
|
|
|
|
await context.route('**/*.{png,jpg,jpeg}', route => route.abort());
|
|
|
|
const page = await context.newPage();
|
|
|
|
await page.goto('https://example.com');
|
|
|
|
await browser.close();
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
context = await browser.new_context()
|
|
|
|
page = await context.new_page()
|
|
|
|
await context.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
|
|
|
|
await page.goto("https://example.com")
|
|
|
|
await browser.close()
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
context = browser.new_context()
|
|
|
|
page = context.new_page()
|
|
|
|
context.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
|
|
|
|
page.goto("https://example.com")
|
|
|
|
browser.close()
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
or the same snippet using a regex pattern instead:
|
|
|
|
|
|
|
|
```js
|
|
|
|
const context = await browser.newContext();
|
|
|
|
await context.route(/(\.png$)|(\.jpg$)/, route => route.abort());
|
|
|
|
const page = await context.newPage();
|
|
|
|
await page.goto('https://example.com');
|
|
|
|
await browser.close();
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
context = await browser.new_context()
|
|
|
|
page = await context.new_page()
|
2021-01-14 15:01:39 -08:00
|
|
|
await context.route(r"(\.png$)|(\.jpg$)", lambda route: route.abort())
|
2021-01-14 11:09:44 -08:00
|
|
|
page = await context.new_page()
|
2021-01-14 07:48:56 -08:00
|
|
|
await page.goto("https://example.com")
|
|
|
|
await browser.close()
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
context = browser.new_context()
|
|
|
|
page = context.new_page()
|
2021-01-14 15:01:39 -08:00
|
|
|
context.route(r"(\.png$)|(\.jpg$)", lambda route: route.abort())
|
2021-01-14 11:09:44 -08:00
|
|
|
page = await context.new_page()
|
2021-01-14 07:48:56 -08:00
|
|
|
page = context.new_page()
|
|
|
|
page.goto("https://example.com")
|
|
|
|
browser.close()
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
Page routes (set up with [`method: Page.route`]) take precedence over browser context routes when request matches both
|
|
|
|
handlers.
|
|
|
|
|
2021-01-12 12:14:27 -08:00
|
|
|
:::note
|
|
|
|
Enabling routing disables http cache.
|
|
|
|
:::
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### param: BrowserContext.route.url
|
|
|
|
- `url` <[string]|[RegExp]|[function]\([URL]\):[boolean]>
|
|
|
|
|
|
|
|
A glob pattern, regex pattern or predicate receiving [URL] to match while routing.
|
|
|
|
|
|
|
|
### param: BrowserContext.route.handler
|
|
|
|
- `handler` <[function]\([Route], [Request]\)>
|
|
|
|
|
|
|
|
handler function to route the request.
|
|
|
|
|
|
|
|
## method: BrowserContext.setDefaultNavigationTimeout
|
|
|
|
|
|
|
|
This setting will change the default maximum navigation time for the following methods and related shortcuts:
|
|
|
|
* [`method: Page.goBack`]
|
|
|
|
* [`method: Page.goForward`]
|
|
|
|
* [`method: Page.goto`]
|
|
|
|
* [`method: Page.reload`]
|
|
|
|
* [`method: Page.setContent`]
|
|
|
|
* [`method: Page.waitForNavigation`]
|
|
|
|
|
2021-01-12 12:14:27 -08:00
|
|
|
:::note
|
|
|
|
[`method: Page.setDefaultNavigationTimeout`] and [`method: Page.setDefaultTimeout`] take priority over
|
2021-01-07 11:46:05 -08:00
|
|
|
[`method: BrowserContext.setDefaultNavigationTimeout`].
|
2021-01-12 12:14:27 -08:00
|
|
|
:::
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### param: BrowserContext.setDefaultNavigationTimeout.timeout
|
|
|
|
- `timeout` <[float]>
|
|
|
|
|
|
|
|
Maximum navigation time in milliseconds
|
|
|
|
|
|
|
|
## method: BrowserContext.setDefaultTimeout
|
|
|
|
|
|
|
|
This setting will change the default maximum time for all the methods accepting [`param: timeout`] option.
|
|
|
|
|
2021-01-12 12:14:27 -08:00
|
|
|
:::note
|
2021-01-14 07:48:56 -08:00
|
|
|
[`method: Page.setDefaultNavigationTimeout`], [`method: Page.setDefaultTimeout`] and
|
|
|
|
[`method: BrowserContext.setDefaultNavigationTimeout`] take priority over [`method: BrowserContext.setDefaultTimeout`].
|
2021-01-12 12:14:27 -08:00
|
|
|
:::
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### param: BrowserContext.setDefaultTimeout.timeout
|
|
|
|
- `timeout` <[float]>
|
|
|
|
|
|
|
|
Maximum time in milliseconds
|
|
|
|
|
|
|
|
## async method: BrowserContext.setExtraHTTPHeaders
|
|
|
|
|
|
|
|
The extra HTTP headers will be sent with every request initiated by any page in the context. These headers are merged
|
|
|
|
with page-specific extra HTTP headers set with [`method: Page.setExtraHTTPHeaders`]. If page overrides a particular
|
|
|
|
header, page-specific header value will be used instead of the browser context header value.
|
|
|
|
|
2021-01-12 12:14:27 -08:00
|
|
|
:::note
|
|
|
|
[`method: BrowserContext.setExtraHTTPHeaders`] does not guarantee the order of headers in the outgoing requests.
|
|
|
|
:::
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### param: BrowserContext.setExtraHTTPHeaders.headers
|
|
|
|
- `headers` <[Object]<[string], [string]>>
|
|
|
|
|
|
|
|
An object containing additional HTTP headers to be sent with every request. All header values must be strings.
|
|
|
|
|
|
|
|
## async method: BrowserContext.setGeolocation
|
|
|
|
|
|
|
|
Sets the context's geolocation. Passing `null` or `undefined` emulates position unavailable.
|
|
|
|
|
|
|
|
```js
|
|
|
|
await browserContext.setGeolocation({latitude: 59.95, longitude: 30.31667});
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
await browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
|
|
|
|
```
|
|
|
|
|
2021-01-12 12:14:27 -08:00
|
|
|
:::note
|
2021-01-14 07:48:56 -08:00
|
|
|
Consider using [`method: BrowserContext.grantPermissions`] to grant permissions for the browser context pages to read
|
|
|
|
its geolocation.
|
2021-01-12 12:14:27 -08:00
|
|
|
:::
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### param: BrowserContext.setGeolocation.geolocation
|
|
|
|
- `geolocation` <[null]|[Object]>
|
2021-01-10 18:18:35 -08:00
|
|
|
- `latitude` <[float]> Latitude between -90 and 90.
|
|
|
|
- `longitude` <[float]> Longitude between -180 and 180.
|
2021-01-07 11:46:05 -08:00
|
|
|
- `accuracy` <[float]> Non-negative accuracy value. Defaults to `0`.
|
|
|
|
|
|
|
|
## async method: BrowserContext.setHTTPCredentials
|
2021-01-12 12:14:27 -08:00
|
|
|
* langs: js
|
2021-01-07 11:46:05 -08:00
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
**DEPRECATED** Browsers may cache credentials after successful authentication. Create a new browser context instead.
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### param: BrowserContext.setHTTPCredentials.httpCredentials
|
|
|
|
- `httpCredentials` <[null]|[Object]>
|
2021-01-10 18:18:35 -08:00
|
|
|
- `username` <[string]>
|
|
|
|
- `password` <[string]>
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
## async method: BrowserContext.setOffline
|
|
|
|
|
|
|
|
### param: BrowserContext.setOffline.offline
|
|
|
|
- `offline` <[boolean]>
|
|
|
|
|
|
|
|
Whether to emulate network being offline for the browser context.
|
|
|
|
|
|
|
|
## async method: BrowserContext.storageState
|
|
|
|
- returns: <[Object]>
|
|
|
|
- `cookies` <[Array]<[Object]>>
|
|
|
|
- `name` <[string]>
|
|
|
|
- `value` <[string]>
|
|
|
|
- `domain` <[string]>
|
|
|
|
- `path` <[string]>
|
|
|
|
- `expires` <[float]> Unix time in seconds.
|
|
|
|
- `httpOnly` <[boolean]>
|
|
|
|
- `secure` <[boolean]>
|
|
|
|
- `sameSite` <"Strict"|"Lax"|"None">
|
|
|
|
- `origins` <[Array]<[Object]>>
|
|
|
|
- `origin` <[string]>
|
|
|
|
- `localStorage` <[Array]<[Object]>>
|
|
|
|
- `name` <[string]>
|
|
|
|
- `value` <[string]>
|
|
|
|
|
|
|
|
Returns storage state for this browser context, contains current cookies and local storage snapshot.
|
|
|
|
|
|
|
|
### option: BrowserContext.storageState.path
|
|
|
|
- `path` <[path]>
|
|
|
|
|
|
|
|
The file path to save the storage state to. If [`option: path`] is a relative path, then it is resolved relative to
|
|
|
|
[current working directory](https://nodejs.org/api/process.html#process_process_cwd). If no path is provided, storage
|
|
|
|
state is still returned, but won't be saved to the disk.
|
|
|
|
|
|
|
|
## async method: BrowserContext.unroute
|
|
|
|
|
|
|
|
Removes a route created with [`method: BrowserContext.route`]. When [`param: handler`] is not specified, removes all
|
|
|
|
routes for the [`param: url`].
|
|
|
|
|
|
|
|
### param: BrowserContext.unroute.url
|
|
|
|
- `url` <[string]|[RegExp]|[function]\([URL]\):[boolean]>
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
A glob pattern, regex pattern or predicate receiving [URL] used to register a routing with
|
|
|
|
[`method: BrowserContext.route`].
|
2021-01-07 11:46:05 -08:00
|
|
|
|
|
|
|
### param: BrowserContext.unroute.handler
|
|
|
|
- `handler` <[function]\([Route], [Request]\)>
|
|
|
|
|
|
|
|
Optional handler function used to register a routing with [`method: BrowserContext.route`].
|
|
|
|
|
|
|
|
## async method: BrowserContext.waitForEvent
|
|
|
|
- returns: <[any]>
|
|
|
|
|
|
|
|
Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
|
|
|
|
value. Will throw an error if the context closes before the event is fired. Returns the event data value.
|
|
|
|
|
|
|
|
```js
|
|
|
|
const context = await browser.newContext();
|
|
|
|
await context.grantPermissions(['geolocation']);
|
|
|
|
```
|
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
```python async
|
|
|
|
context = await browser.new_context()
|
|
|
|
await context.grant_permissions(["geolocation"])
|
|
|
|
```
|
|
|
|
|
|
|
|
```python sync
|
|
|
|
context = browser.new_context()
|
|
|
|
context.grant_permissions(["geolocation"])
|
|
|
|
```
|
|
|
|
|
2021-01-07 11:46:05 -08:00
|
|
|
### param: BrowserContext.waitForEvent.event
|
|
|
|
- `event` <[string]>
|
|
|
|
|
|
|
|
Event name, same one would pass into `browserContext.on(event)`.
|
|
|
|
|
|
|
|
### param: BrowserContext.waitForEvent.optionsOrPredicate
|
2021-01-08 15:00:14 -08:00
|
|
|
* langs: js
|
2021-01-12 12:14:27 -08:00
|
|
|
- `optionsOrPredicate` <[function]|[Object]>
|
|
|
|
- `predicate` <[function]> receives the event data and resolves to truthy value when the waiting should resolve.
|
2021-01-14 07:48:56 -08:00
|
|
|
- `timeout` <[float]> maximum time to wait for in milliseconds. Defaults to `30000` (30 seconds). Pass `0` to
|
|
|
|
disable timeout. The default value can be changed by using the [`method: BrowserContext.setDefaultTimeout`].
|
2021-01-07 11:46:05 -08:00
|
|
|
|
2021-01-14 07:48:56 -08:00
|
|
|
Either a predicate that receives an event or an options object. Optional.
|