Skip to content

Commit d8bf769

Browse files
committed
feat(playwright): add browser launch kwargs
1 parent 038e1e3 commit d8bf769

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

lambda_function.py

+24-5
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class Payload(pydantic.BaseModel):
5353
document_url: str | None = None
5454
## Browse the document in a browser before rendering
5555
browser_url: str | None = None
56+
browser_launch_kwargs: dict[str, Any] = pydantic.Field(default_factory=dict)
5657
browser_headers: dict = pydantic.Field(default_factory=dict)
5758
browser_context: dict = pydantic.Field(default_factory=dict)
5859
browser_pdf_options: Mapping[str, Any] = pydantic.Field(default_factory=dict)
@@ -98,8 +99,14 @@ def init() -> None:
9899

99100

100101
@contextmanager
101-
def _playwright_visit_page(browser_url: str, headers: dict, context: dict) -> Iterator[playwright.sync_api.Page]:
102+
def _playwright_visit_page(
103+
browser_url: str,
104+
headers: dict,
105+
context: dict,
106+
browser_launch_kwargs: dict[str, Any],
107+
) -> Iterator[playwright.sync_api.Page]:
102108
print("splat|playwright_handler|url=", browser_url)
109+
103110
with sync_playwright() as p:
104111
browser = p.chromium.launch(
105112
headless=True,
@@ -143,6 +150,7 @@ def _playwright_visit_page(browser_url: str, headers: dict, context: dict) -> It
143150
"--use-gl=swiftshader",
144151
"--use-mock-keychain",
145152
],
153+
**browser_launch_kwargs,
146154
)
147155
context = browser.new_context(**context)
148156
context.set_extra_http_headers(headers)
@@ -160,13 +168,19 @@ def playwright_page_to_pdf(
160168
output_filepath: str,
161169
pdf_options: Mapping[str, str],
162170
context: dict,
171+
browser_launch_kwargs: dict[str, Any],
163172
) -> None:
164-
with _playwright_visit_page(browser_url, headers, context) as page:
173+
with _playwright_visit_page(browser_url, headers, context, browser_launch_kwargs) as page:
165174
page.pdf(path=output_filepath, **pdf_options)
166175

167176

168-
def playwright_page_to_html_string(browser_url: str, headers: dict, context: dict) -> str:
169-
with _playwright_visit_page(browser_url, headers, context) as page:
177+
def playwright_page_to_html_string(
178+
browser_url: str,
179+
headers: dict,
180+
context: dict,
181+
browser_launch_kwargs: dict[str, Any],
182+
) -> str:
183+
with _playwright_visit_page(browser_url, headers, context, browser_launch_kwargs) as page:
170184
return page.content()
171185

172186

@@ -186,6 +200,7 @@ def pdf_from_document_content(payload: Payload, output_filepath: str) -> None:
186200
output_filepath,
187201
payload.browser_pdf_options,
188202
payload.browser_context,
203+
payload.browser_launch_kwargs,
189204
)
190205

191206

@@ -210,6 +225,7 @@ def pdf_from_document_url(payload: Payload, output_filepath: str) -> None:
210225
output_filepath,
211226
payload.browser_pdf_options,
212227
payload.browser_context,
228+
payload.browser_launch_kwargs,
213229
)
214230

215231

@@ -219,7 +235,9 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
219235
# First we need to visit the browser with playwright and save the html
220236
assert payload.browser_url
221237
if payload.renderer == Renderers.princexml:
222-
html = playwright_page_to_html_string(payload.browser_url, payload.browser_headers, payload.browser_context)
238+
html = playwright_page_to_html_string(
239+
payload.browser_url, payload.browser_headers, payload.browser_context, payload.browser_launch_kwargs
240+
)
223241
pdf_from_document_content(
224242
Payload(document_content=html, renderer=Renderers.princexml),
225243
output_filepath,
@@ -231,6 +249,7 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
231249
output_filepath,
232250
payload.browser_pdf_options,
233251
payload.browser_context,
252+
payload.browser_launch_kwargs,
234253
)
235254

236255

0 commit comments

Comments
 (0)