From 78ba7d0d215b23ffc3dc95748824ecf04046060d Mon Sep 17 00:00:00 2001 From: Ryan Byrne Date: Mon, 8 Jun 2026 07:56:35 -0700 Subject: [PATCH] feat: add js_instructions parameter to ZenRowsScraper.scrape() Co-Authored-By: Claude Sonnet 4.6 --- src/vl_apify_shared/zenrows.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/vl_apify_shared/zenrows.py b/src/vl_apify_shared/zenrows.py index 7e3f28d..c199456 100644 --- a/src/vl_apify_shared/zenrows.py +++ b/src/vl_apify_shared/zenrows.py @@ -1,3 +1,4 @@ +import json import time from dataclasses import dataclass, field from typing import Optional @@ -23,6 +24,7 @@ class ZenRowsScraper: wait: Optional[int] = None, wait_for: Optional[str] = None, premium_proxy: bool = False, + js_instructions: Optional[list] = None, ): """Scrape a URL using ZenRows scraping SDK. @@ -32,6 +34,7 @@ class ZenRowsScraper: wait: milliseconds to wait after page load wait_for: css selector to wait for premium_proxy: use residential proxy (ZenRows premium_proxy=true) + js_instructions: list of ZenRows instruction dicts (evaluate, wait_for, click, etc.) """ self.logger.debug(f"ZenRows scraping url: {url}...") params: dict = {} @@ -43,6 +46,8 @@ class ZenRowsScraper: params["wait"] = str(wait) if wait_for is not None: params["wait_for"] = wait_for + if js_instructions is not None: + params["js_instructions"] = json.dumps(js_instructions) start = time.monotonic() response = self.client.get(url, params=params) elapsed_time = round((time.monotonic() - start) * 1000)