From c2e66ab75351d35b52f32453da618d16daea43fc Mon Sep 17 00:00:00 2001 From: Karim shoair Date: Mon, 13 Apr 2026 04:39:01 +0200 Subject: [PATCH] docs(agent): update skill with the latest changes --- agent-skill/Scrapling-Skill.zip | Bin 82913 -> 83257 bytes .../references/fetching/dynamic.md | 28 ++++++++++++++++-- .../references/fetching/stealthy.md | 5 ++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/agent-skill/Scrapling-Skill.zip b/agent-skill/Scrapling-Skill.zip index b8766e29220768219f31dd7a871e37031c2651c9..220183b517e707516db32418604807b6ba9e6382 100644 GIT binary patch delta 20721 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
6&vJ7 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 ZKe-p`E(r9`tRyaOdwLMa;~H@B^lx&^pvwRN diff --git a/agent-skill/Scrapling-Skill/references/fetching/dynamic.md b/agent-skill/Scrapling-Skill/references/fetching/dynamic.md index f623521..a831d7c 100644 --- a/agent-skill/Scrapling-Skill/references/fetching/dynamic.md +++ b/agent-skill/Scrapling-Skill/references/fetching/dynamic.md @@ -60,7 +60,8 @@ All arguments for `DynamicFetcher` and its session classes: | load_dom | Enabled by default, wait for all JavaScript on page(s) to fully load and execute (wait for the `domcontentloaded` state). | ✔️ | | timeout | The timeout (milliseconds) used in all operations and waits through the page. The default is 30,000 ms (30 seconds). | ✔️ | | wait | The time (milliseconds) the fetcher will wait after everything finishes before closing the page and returning the `Response` object. | ✔️ | -| page_action | Added for automation. Pass a function that takes the `page` object and does the necessary automation. | ✔️ | +| page_action | Added for automation. Pass a function that takes the `page` object, runs after navigation, and does the necessary automation. | ✔️ | +| page_setup | A function that takes the `page` object, runs before navigation. Use it to register event listeners or routes that must be set up before the page loads. | ✔️ | | wait_selector | Wait for a specific css selector to be in a specific state. | ✔️ | | init_script | An absolute path to a JavaScript file to be executed on page creation for all pages in this session. | ✔️ | | wait_selector_state | Scrapling will wait for the given state to be fulfilled for the selector given with `wait_selector`. _Default state is `attached`._ | ✔️ | @@ -84,7 +85,7 @@ All arguments for `DynamicFetcher` and its session classes: | capture_xhr | Pass a regex URL pattern string to capture XHR/fetch requests matching it during page load. Captured responses are available via `response.captured_xhr`. Defaults to `None` (disabled). | ✔️ | | executable_path | Absolute path to a custom browser executable to use instead of the bundled Chromium. Useful for non-standard installations or custom browser builds. | ✔️ | -In session classes, all these arguments can be set globally for the session. Still, you can configure each request individually by passing some of the arguments here that can be configured on the browser tab level like: `google_search`, `timeout`, `wait`, `page_action`, `extra_headers`, `disable_resources`, `wait_selector`, `wait_selector_state`, `network_idle`, `load_dom`, `blocked_domains`, `proxy`, and `selector_config`. +In session classes, all these arguments can be set globally for the session. Still, you can configure each request individually by passing some of the arguments here that can be configured on the browser tab level like: `google_search`, `timeout`, `wait`, `page_action`, `page_setup`, `extra_headers`, `disable_resources`, `wait_selector`, `wait_selector_state`, `network_idle`, `load_dom`, `blocked_domains`, `proxy`, and `selector_config`. **Notes:** 1. The `disable_resources` option made requests ~25% faster in tests for some websites and can help save proxy usage, but be careful with it, as it can cause some websites to never finish loading. @@ -156,6 +157,29 @@ with open(file='main_cover.png', mode='wb') as f: The `body` attribute of the `Response` object always returns `bytes`. +### Pre-Navigation Setup +If you need to set up event listeners, routes, or scripts that must be registered before the page navigates, use `page_setup`. This function receives the `page` object and runs before `page.goto()` is called. + +```python +from playwright.sync_api import Page + +def capture_websockets(page: Page): + page.on("websocket", lambda ws: print(f"WebSocket opened: {ws.url}")) + +page = DynamicFetcher.fetch('https://example.com', page_setup=capture_websockets) +``` +Async version: +```python +from playwright.async_api import Page + +async def capture_websockets(page: Page): + page.on("websocket", lambda ws: print(f"WebSocket opened: {ws.url}")) + +page = await DynamicFetcher.async_fetch('https://example.com', page_setup=capture_websockets) +``` + +You can combine it with `page_action` -- `page_setup` runs before navigation, `page_action` runs after. + ### Browser Automation This is where your knowledge about [Playwright's Page API](https://playwright.dev/python/docs/api/class-page) comes into play. The function you pass here takes the page object from Playwright's API, performs the desired action, and then the fetcher continues. diff --git a/agent-skill/Scrapling-Skill/references/fetching/stealthy.md b/agent-skill/Scrapling-Skill/references/fetching/stealthy.md index 7f3c896..8939c8d 100644 --- a/agent-skill/Scrapling-Skill/references/fetching/stealthy.md +++ b/agent-skill/Scrapling-Skill/references/fetching/stealthy.md @@ -38,7 +38,8 @@ Scrapling provides many options with this fetcher and its session classes. Befor | load_dom | Enabled by default, wait for all JavaScript on page(s) to fully load and execute (wait for the `domcontentloaded` state). | ✔️ | | timeout | The timeout (milliseconds) used in all operations and waits through the page. The default is 30,000 ms (30 seconds). | ✔️ | | wait | The time (milliseconds) the fetcher will wait after everything finishes before closing the page and returning the `Response` object. | ✔️ | -| page_action | Added for automation. Pass a function that takes the `page` object and does the necessary automation. | ✔️ | +| page_action | Added for automation. Pass a function that takes the `page` object, runs after navigation, and does the necessary automation. | ✔️ | +| page_setup | A function that takes the `page` object, runs before navigation. Use it to register event listeners or routes that must be set up before the page loads. | ✔️ | | wait_selector | Wait for a specific css selector to be in a specific state. | ✔️ | | init_script | An absolute path to a JavaScript file to be executed on page creation for all pages in this session. | ✔️ | | wait_selector_state | Scrapling will wait for the given state to be fulfilled for the selector given with `wait_selector`. _Default state is `attached`._ | ✔️ | @@ -66,7 +67,7 @@ Scrapling provides many options with this fetcher and its session classes. Befor | capture_xhr | Pass a regex URL pattern string to capture XHR/fetch requests matching it during page load. Captured responses are available via `response.captured_xhr`. Defaults to `None` (disabled). | ✔️ | | executable_path | Absolute path to a custom browser executable to use instead of the bundled Chromium. Useful for non-standard installations or custom browser builds. | ✔️ | -In session classes, all these arguments can be set globally for the session. Still, you can configure each request individually by passing some of the arguments here that can be configured on the browser tab level like: `google_search`, `timeout`, `wait`, `page_action`, `extra_headers`, `disable_resources`, `wait_selector`, `wait_selector_state`, `network_idle`, `load_dom`, `solve_cloudflare`, `blocked_domains`, `proxy`, and `selector_config`. +In session classes, all these arguments can be set globally for the session. Still, you can configure each request individually by passing some of the arguments here that can be configured on the browser tab level like: `google_search`, `timeout`, `wait`, `page_action`, `page_setup`, `extra_headers`, `disable_resources`, `wait_selector`, `wait_selector_state`, `network_idle`, `load_dom`, `solve_cloudflare`, `blocked_domains`, `proxy`, and `selector_config`. **Notes:**