Skip to content

Commit 4128101

Browse files
committed
migrating docs
1 parent 548e031 commit 4128101

File tree

3 files changed

+332
-5
lines changed

3 files changed

+332
-5
lines changed
+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from browserbase import Browserbase
2+
3+
# import os
4+
from typing import Optional
5+
6+
# BROWSERBASE_API_KEY = os.environ.get("BROWSERBASE_API_KEY")
7+
# BROWSERBASE_PROJECT_ID = os.environ.get("BROWSERBASE_PROJECT_ID")
8+
# bb = Browserbase(api_key=BROWSERBASE_API_KEY)
9+
10+
11+
def get_connect_url(
12+
bb: Browserbase, session_id: Optional[str] = None, proxy: Optional[bool] = None
13+
):
14+
base_url = f"{BROWSERBASE_CONNECT_URL}?apiKey={bb.api_key}"
15+
if session_id:
16+
base_url += f"&sessionId={session_id}"
17+
if proxy:
18+
base_url += "&enableProxy=true"
19+
20+
return base_url
21+
22+
23+
def list_sessions(bb: Browserbase):
24+
return bb.sessions.list()
25+
26+
27+
# Original Signature: def create_session(self, options: Optional[CreateSessionOptions] = None) -> Session
28+
# New Signature: https://github.com/browserbase/sdk-python/blob/548e0314002e2e9a8c1ab78b54b20bb6e7dea769/src/browserbase/resources/sessions/sessions.py#L101-L117
29+
def create_session(bb: Browserbase, project_id: str, **kwargs):
30+
return bb.sessions.create(project_id=project_id, **kwargs)
31+
32+
33+
def complete_session(bb: Browserbase, project_id: str, session_id: str):
34+
return bb.sessions.update(
35+
id=session_id, project_id=project_id, status="REQUEST_RELEASE"
36+
)
37+
38+
39+
def get_session(bb: Browserbase, session_id: str):
40+
return bb.sessions.retrieve(id=session_id)
41+
42+
43+
def get_session_recording(bb: Browserbase, session_id: str):
44+
return bb.sessions.recording.retrieve(id=session_id)
45+
46+
47+
# Original Signature: def get_session_downloads(self, session_id: str, retry_interval: int = 2000, retry_count: int = 2) -> Optional[bytes]:
48+
# To avoid rate limiting, we don't allow retry_interval to be configured; however, you can configure retries with the following syntax on bb init:
49+
# bb = Browserbase(api_key=BROWSERBASE_API_KEY, max_retries=5)
50+
def get_session_downloads(bb: Browserbase, session_id: str):
51+
return bb.sessions.downloads.list(id=session_id)
52+
53+
54+
def get_debug_connection_urls(bb: Browserbase, session_id: str):
55+
return bb.sessions.debug(id=session_id)
56+
57+
58+
def get_session_logs(bb: Browserbase, session_id: str):
59+
return bb.sessions.logs.list(id=session_id)
60+
61+
62+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
63+
bb.sessions.debug()

examples/playwright_proxy.py

+26-5
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,15 @@ def check_proxy_bytes(session_id: str) -> None:
2424
def run_enable_via_create_session(playwright: Playwright) -> None:
2525
session = bb.sessions.create(project_id=BROWSERBASE_PROJECT_ID, proxies=True)
2626

27+
print("Connecting")
2728
browser = playwright.chromium.connect_over_cdp(session.connect_url)
29+
print("Connected")
2830

2931
context = browser.contexts[0]
3032
page = context.pages[0]
33+
print("Going to google")
3134
page.goto("https://www.google.com")
35+
print("Got title")
3236
page_title = page.title()
3337

3438
page.close()
@@ -176,9 +180,26 @@ def run_geolocation_non_american_city(playwright: Playwright) -> None:
176180
if __name__ == "__main__":
177181
with sync_playwright() as playwright:
178182
# You can run any of these tests by uncommenting them
183+
print("\nRunning: enable_via_create_session")
179184
run_enable_via_create_session(playwright)
180-
# run_enable_via_querystring_with_created_session(playwright)
181-
# run_geolocation_country(playwright)
182-
# run_geolocation_state(playwright)
183-
# run_geolocation_american_city(playwright)
184-
# run_geolocation_non_american_city(playwright)
185+
print("✓ Completed: enable_via_create_session\n")
186+
187+
print("Running: enable_via_querystring_with_created_session")
188+
run_enable_via_querystring_with_created_session(playwright)
189+
print("✓ Completed: enable_via_querystring_with_created_session\n")
190+
191+
print("Running: geolocation_country")
192+
run_geolocation_country(playwright)
193+
print("✓ Completed: geolocation_country\n")
194+
195+
print("Running: geolocation_state")
196+
run_geolocation_state(playwright)
197+
print("✓ Completed: geolocation_state\n")
198+
199+
print("Running: geolocation_american_city")
200+
run_geolocation_american_city(playwright)
201+
print("✓ Completed: geolocation_american_city\n")
202+
203+
print("Running: geolocation_non_american_city")
204+
run_geolocation_non_american_city(playwright)
205+
print("✓ Completed: geolocation_non_american_city\n")

migrating.md

+243
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
# Upgrade guide to v1.0
2+
3+
The Browserbase v1.0.0 Python SDK has been rewritten from the ground up and ships with a ton of new features and better support that we can't wait for you to try. Unfortunately, however, this means that the old SDKs will be deprecated and archived in favor of the new SDK.
4+
5+
We hope this guide is useful to you; if you have any questions don't hesitate to reach out to [email protected] or [create a new issue](https://github.com/browserbase/sdk-python/issues/new).
6+
7+
## Create Session
8+
9+
### Old SDK
10+
11+
```python
12+
from browserbase import Browserbase, CreateSessionOptions
13+
14+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
15+
options = CreateSessionOptions(extensionId='123')
16+
browserbase.create_session(options)
17+
```
18+
19+
Function signature: `def create_session(self, options: Optional[CreateSessionOptions] = None)`
20+
21+
`CreateSessionOptions` is a Pydantic object defined [here](https://github.com/browserbase/python-sdk/blob/0a499ba29853f20bb3055d7c81c5f61c24fcd9ec/browserbase/__init__.py#L52) in the old SDK.
22+
23+
### New SDK
24+
25+
```python
26+
from browserbase import Browserbase
27+
28+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
29+
session = bb.sessions.create(project_id=BROWSERBASE_PROJECT_ID)
30+
```
31+
32+
For more complex session creation, you can import `BrowserSettings` and use Pydantic's `TypeAdapter` to conform JSON spec to the appropriate Pydantic class. You can also import each individual subclass, but this may be rather tedious.
33+
34+
```python
35+
from browserbase import Browserbase
36+
from pydantic import TypeAdapter
37+
from browserbase.types.session_create_params import BrowserSettings
38+
39+
session = bb.sessions.create(
40+
project_id=BROWSERBASE_PROJECT_ID,
41+
extension_id="some_extension_id"
42+
browser_settings=TypeAdapter(BrowserSettings).validate_python(
43+
{"context": {"id": context_id, "persist": True}}
44+
),
45+
)
46+
```
47+
48+
## Get Connection Url
49+
50+
### Old SDK
51+
52+
```python
53+
from browserbase import Browserbase
54+
55+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
56+
57+
# To create a new session and connect to it
58+
connect_url = browserbase.get_connect_url()
59+
60+
# To connect to a created session
61+
connect_url = browserbase.get_connect_url(session_id=some_session.id)
62+
```
63+
64+
### New SDK
65+
66+
```python
67+
from browserbase import Browserbase
68+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
69+
70+
# We must create a session first
71+
session = bb.sessions.create(project_id=BROWSERBASE_PROJECT_ID)
72+
connect_url = session.connect_url
73+
```
74+
75+
## List Sessions
76+
77+
### Old SDK
78+
79+
```python
80+
from browserbase import Browserbase
81+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
82+
sessions = browserbase.list_sessions()
83+
```
84+
85+
### New SDK
86+
87+
```python
88+
from browserbase import Browserbase
89+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
90+
sessions = bb.sessions.list()
91+
```
92+
93+
## Complete Session
94+
95+
### Old SDK
96+
97+
```python
98+
from browserbase import Browserbase
99+
100+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
101+
browserbase.complete_session(session_id=some_session.id)
102+
```
103+
104+
### New SDK
105+
106+
```python
107+
from browserbase import Browserbase
108+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
109+
bb.sessions.update(id=some_session.id, status="REQUEST_RELEASE")
110+
```
111+
112+
## Get Session
113+
114+
### Old SDK
115+
116+
```python
117+
from browserbase import Browserbase
118+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
119+
session = browserbase.get_session(session_id=some_session.id)
120+
```
121+
122+
### New SDK
123+
124+
```python
125+
from browserbase import Browserbase
126+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
127+
session = bb.sessions.retrieve(id=some_session.id)
128+
```
129+
130+
## Get Session Recording
131+
132+
### Old SDK
133+
134+
```python
135+
from browserbase import Browserbase
136+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
137+
recording = browserbase.get_session_recording(session_id=some_session.id)
138+
```
139+
140+
### New SDK
141+
142+
```python
143+
from browserbase import Browserbase
144+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
145+
recording = bb.sessions.recording.retrieve(id=some_session.id)
146+
```
147+
148+
## Get Session Downloads
149+
150+
### Old SDK
151+
152+
> [!NOTE]
153+
> The parameter `retry_interval` is no longer supported. You can configure retries with the following syntax on bb init:
154+
>
155+
> `bb = Browserbase(api_key=BROWSERBASE_API_KEY, max_retries=5)`
156+
157+
```python
158+
from browserbase import Browserbase
159+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
160+
downloads = browserbase.get_session_downloads(session_id=some_session.id)
161+
```
162+
163+
### New SDK
164+
165+
```python
166+
from browserbase import Browserbase
167+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
168+
downloads = bb.sessions.downloads.list(id=some_session.id)
169+
```
170+
171+
## Get Debug Connection URLs
172+
173+
### Old SDK
174+
175+
```python
176+
from browserbase import Browserbase
177+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
178+
debug_urls = browserbase.get_debug_connection_urls(session_id=some_session.id)
179+
```
180+
181+
### New SDK
182+
183+
```python
184+
from browserbase import Browserbase
185+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
186+
debug_urls = bb.sessions.debug(id=some_session.id)
187+
```
188+
189+
## Get Session Logs
190+
191+
### Old SDK
192+
193+
```python
194+
from browserbase import Browserbase
195+
browserbase = Browserbase(api_key=BROWSERBASE_API_KEY, project_id=BROWSERBASE_PROJECT_ID)
196+
logs = browserbase.get_session_logs(session_id=some_session.id)
197+
```
198+
199+
### New SDK
200+
201+
```python
202+
from browserbase import Browserbase
203+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
204+
logs = bb.sessions.logs.list(id=some_session.id)
205+
```
206+
207+
# Deprecated Methods
208+
209+
`load`, `load_url`, and `screenshot` are fully deprecated. You can use the following example instead that encapsulates the same functionality using Playwright
210+
211+
```python
212+
from playwright.sync_api import Playwright, sync_playwright
213+
from browserbase import Browserbase
214+
215+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
216+
217+
def run(playwright: Playwright) -> None:
218+
# Create a session on Browserbase
219+
session = bb.sessions.create(project_id=BROWSERBASE_PROJECT_ID)
220+
221+
# Connect to the remote session
222+
chromium = playwright.chromium
223+
browser = chromium.connect_over_cdp(session.connect_url)
224+
context = browser.contexts[0]
225+
page = context.pages[0]
226+
227+
# Execute Playwright actions on the remote browser tab
228+
page.goto("https://news.ycombinator.com/")
229+
page_title = page.title()
230+
assert (
231+
page_title == "Hacker News"
232+
), f"Page title is not 'Hacker News', it is '{page_title}'"
233+
page.screenshot(path="screenshot.png")
234+
235+
page.close()
236+
browser.close()
237+
print("Done!")
238+
239+
240+
if __name__ == "__main__":
241+
with sync_playwright() as playwright:
242+
run(playwright)
243+
```

0 commit comments

Comments
 (0)