Files
Saurav Panda ad8f3a4dd7 feat(tools): print page metadata in save_as_pdf header/footer
The save_as_pdf action now renders page metadata into the PDF margins by
default, matching Chrome's Print dialog: the date in the header and the page
URL plus page numbers in the footer.

- Add display_header_footer (default True), header_template, and
  footer_template params to SaveAsPdfAction.
- Pass displayHeaderFooter + header/footer templates and explicit margins to
  CDP Page.printToPDF so the metadata has room to render (Chrome clips it
  otherwise, and defaults header/footer font-size to 0px).
- Default templates show the date / URL + page numbers; callers can override
  with custom HTML or disable entirely for a clean PDF.
2026-06-11 08:29:41 +05:30

52 lines
1.5 KiB
Python

"""
Save any webpage as a PDF using the save_as_pdf action.
The agent can save the current page as a PDF at any point during a task.
Supports custom filenames, paper sizes (Letter, A4, Legal, A3, Tabloid),
landscape orientation, and background printing.
By default the PDF includes page metadata in the margins (just like Chrome's
Print dialog): the date in the header and the page URL plus page numbers in the
footer. Pass display_header_footer=False for a clean PDF, or supply custom
header_template / footer_template HTML to control exactly what's printed.
Setup:
1. Get your API key from https://cloud.browser-use.com/new-api-key
2. Set environment variable: export BROWSER_USE_API_KEY="your-key"
"""
import asyncio
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
from dotenv import load_dotenv
load_dotenv()
from browser_use import Agent, ChatBrowserUse
async def main():
agent = Agent(
task=(
'Go to https://news.ycombinator.com and save the front page as a PDF named "hackernews". '
'Then go to https://en.wikipedia.org/wiki/Web_browser and save just that article as a PDF in A4 format.'
),
llm=ChatBrowserUse(model='bu-2-0'),
)
history = await agent.run()
# Print paths of any PDF files the agent saved
print('\nSaved files:')
for result in history.action_results():
if result.attachments:
for path in result.attachments:
print(f' {path}')
if __name__ == '__main__':
asyncio.run(main())