From 9ed26e1e07766d25bc6563ad1246e0deea458a05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C5=91=20M=C3=B3ricz?= Date: Fri, 27 Jun 2025 16:26:27 +0200 Subject: [PATCH] feat(sdk/python): add pdf action (ENG-2515) (#1722) * feat(sdk/python): add pdf action result * bump --------- Co-authored-by: Nicolas --- apps/python-sdk/firecrawl/__init__.py | 2 +- apps/python-sdk/firecrawl/firecrawl.py | 27 ++++++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/apps/python-sdk/firecrawl/__init__.py b/apps/python-sdk/firecrawl/__init__.py index d27472b6..a935faa7 100644 --- a/apps/python-sdk/firecrawl/__init__.py +++ b/apps/python-sdk/firecrawl/__init__.py @@ -13,7 +13,7 @@ import os from .firecrawl import FirecrawlApp, AsyncFirecrawlApp, JsonConfig, ScrapeOptions, ChangeTrackingOptions # noqa -__version__ = "2.10.0" +__version__ = "2.10.1" # Define the logger for the Firecrawl project logger: logging.Logger = logging.getLogger("firecrawl") diff --git a/apps/python-sdk/firecrawl/firecrawl.py b/apps/python-sdk/firecrawl/firecrawl.py index fbd458f8..9d4ec358 100644 --- a/apps/python-sdk/firecrawl/firecrawl.py +++ b/apps/python-sdk/firecrawl/firecrawl.py @@ -96,6 +96,7 @@ class AgentOptionsExtract(pydantic.BaseModel): class ActionsResult(pydantic.BaseModel): """Result of actions performed during scraping.""" screenshots: List[str] + pdfs: List[str] class ChangeTrackingData(pydantic.BaseModel): """ @@ -204,6 +205,12 @@ class ExecuteJavascriptAction(pydantic.BaseModel): type: Literal["executeJavascript"] script: str +class PDFAction(pydantic.BaseModel): + """PDF action to perform during scraping.""" + type: Literal["pdf"] + format: Optional[Literal["A0", "A1", "A2", "A3", "A4", "A5", "A6", "Letter", "Legal", "Tabloid", "Ledger"]] = None + landscape: Optional[bool] = None + scale: Optional[float] = None class ExtractAgent(pydantic.BaseModel): """Configuration for the agent in extract operations.""" @@ -220,7 +227,7 @@ class ScrapeParams(ScrapeOptions): """Parameters for scraping operations.""" extract: Optional[JsonConfig] = None jsonOptions: Optional[JsonConfig] = None - actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None + actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]] = None agent: Optional[AgentOptions] = None webhook: Optional[WebhookConfig] = None @@ -470,7 +477,7 @@ class FirecrawlApp: parse_pdf: Optional[bool] = None, extract: Optional[JsonConfig] = None, json_options: Optional[JsonConfig] = None, - actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None, + actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]] = None, change_tracking_options: Optional[ChangeTrackingOptions] = None, max_age: Optional[int] = None, store_in_cache: Optional[bool] = None, @@ -494,7 +501,7 @@ class FirecrawlApp: proxy (Optional[Literal["basic", "stealth", "auto"]]): Proxy type (basic/stealth) extract (Optional[JsonConfig]): Content extraction settings json_options (Optional[JsonConfig]): JSON extraction settings - actions (Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]]): Actions to perform + actions (Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]]): Actions to perform change_tracking_options (Optional[ChangeTrackingOptions]): Change tracking settings @@ -1237,7 +1244,7 @@ class FirecrawlApp: proxy: Optional[Literal["basic", "stealth", "auto"]] = None, extract: Optional[JsonConfig] = None, json_options: Optional[JsonConfig] = None, - actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None, + actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]] = None, agent: Optional[AgentOptions] = None, poll_interval: Optional[int] = 2, max_concurrency: Optional[int] = None, @@ -1375,7 +1382,7 @@ class FirecrawlApp: proxy: Optional[Literal["basic", "stealth", "auto"]] = None, extract: Optional[JsonConfig] = None, json_options: Optional[JsonConfig] = None, - actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None, + actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]] = None, agent: Optional[AgentOptions] = None, max_concurrency: Optional[int] = None, idempotency_key: Optional[str] = None, @@ -1511,7 +1518,7 @@ class FirecrawlApp: proxy: Optional[Literal["basic", "stealth", "auto"]] = None, extract: Optional[JsonConfig] = None, json_options: Optional[JsonConfig] = None, - actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None, + actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]] = None, agent: Optional[AgentOptions] = None, max_concurrency: Optional[int] = None, idempotency_key: Optional[str] = None, @@ -2912,7 +2919,7 @@ class AsyncFirecrawlApp(FirecrawlApp): parse_pdf: Optional[bool] = None, extract: Optional[JsonConfig] = None, json_options: Optional[JsonConfig] = None, - actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None, + actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]] = None, **kwargs) -> ScrapeResponse[Any]: """ Scrape a single URL asynchronously. @@ -2933,7 +2940,7 @@ class AsyncFirecrawlApp(FirecrawlApp): proxy (Optional[Literal["basic", "stealth", "auto"]]): Proxy type (basic/stealth) extract (Optional[JsonConfig]): Content extraction settings json_options (Optional[JsonConfig]): JSON extraction settings - actions (Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]]): Actions to perform + actions (Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]]): Actions to perform **kwargs: Additional parameters to pass to the API Returns: @@ -3043,7 +3050,7 @@ class AsyncFirecrawlApp(FirecrawlApp): proxy: Optional[Literal["basic", "stealth", "auto"]] = None, extract: Optional[JsonConfig] = None, json_options: Optional[JsonConfig] = None, - actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None, + actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]] = None, agent: Optional[AgentOptions] = None, poll_interval: Optional[int] = 2, idempotency_key: Optional[str] = None, @@ -3182,7 +3189,7 @@ class AsyncFirecrawlApp(FirecrawlApp): proxy: Optional[Literal["basic", "stealth", "auto"]] = None, extract: Optional[JsonConfig] = None, json_options: Optional[JsonConfig] = None, - actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None, + actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction, PDFAction]]] = None, agent: Optional[AgentOptions] = None, idempotency_key: Optional[str] = None, **kwargs