diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..09bf5d6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyc +__pycache__/ \ No newline at end of file diff --git a/Dockers/puppeteer-api/__pycache__/install_playwright.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/install_playwright.cpython-313.pyc deleted file mode 100644 index 5ab8dfb..0000000 Binary files a/Dockers/puppeteer-api/__pycache__/install_playwright.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/__pycache__/main.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/main.cpython-313.pyc deleted file mode 100644 index 6f291ab..0000000 Binary files a/Dockers/puppeteer-api/__pycache__/main.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/__pycache__/monitor.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/monitor.cpython-313.pyc deleted file mode 100644 index a1d5ac8..0000000 Binary files a/Dockers/puppeteer-api/__pycache__/monitor.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/__pycache__/run.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/run.cpython-313.pyc deleted file mode 100644 index 1f3ab83..0000000 Binary files a/Dockers/puppeteer-api/__pycache__/run.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/__pycache__/test_cloudflare_bypass.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/test_cloudflare_bypass.cpython-313.pyc deleted file mode 100644 index 60a71b1..0000000 Binary files a/Dockers/puppeteer-api/__pycache__/test_cloudflare_bypass.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/__pycache__/test_database.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/test_database.cpython-313.pyc deleted file mode 100644 index 4898e21..0000000 Binary files a/Dockers/puppeteer-api/__pycache__/test_database.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/__pycache__/test_postgres_setup.cpython-313.pyc b/Dockers/puppeteer-api/__pycache__/test_postgres_setup.cpython-313.pyc deleted file mode 100644 index ea29050..0000000 Binary files a/Dockers/puppeteer-api/__pycache__/test_postgres_setup.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/__pycache__/__init__.cpython-313.pyc b/Dockers/puppeteer-api/app/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index e0e2ba5..0000000 Binary files a/Dockers/puppeteer-api/app/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/__pycache__/config.cpython-313.pyc b/Dockers/puppeteer-api/app/__pycache__/config.cpython-313.pyc deleted file mode 100644 index 57ddc22..0000000 Binary files a/Dockers/puppeteer-api/app/__pycache__/config.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/__pycache__/database.cpython-313.pyc b/Dockers/puppeteer-api/app/__pycache__/database.cpython-313.pyc deleted file mode 100644 index d53bbbb..0000000 Binary files a/Dockers/puppeteer-api/app/__pycache__/database.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/__pycache__/main.cpython-313.pyc b/Dockers/puppeteer-api/app/__pycache__/main.cpython-313.pyc deleted file mode 100644 index 0a61340..0000000 Binary files a/Dockers/puppeteer-api/app/__pycache__/main.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/routes/__pycache__/__init__.cpython-313.pyc b/Dockers/puppeteer-api/app/routes/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 0988cd6..0000000 Binary files a/Dockers/puppeteer-api/app/routes/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/routes/__pycache__/browser.cpython-313.pyc b/Dockers/puppeteer-api/app/routes/__pycache__/browser.cpython-313.pyc deleted file mode 100644 index 973ec9e..0000000 Binary files a/Dockers/puppeteer-api/app/routes/__pycache__/browser.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/routes/__pycache__/cache.cpython-313.pyc b/Dockers/puppeteer-api/app/routes/__pycache__/cache.cpython-313.pyc deleted file mode 100644 index f33fef7..0000000 Binary files a/Dockers/puppeteer-api/app/routes/__pycache__/cache.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/routes/__pycache__/health.cpython-313.pyc b/Dockers/puppeteer-api/app/routes/__pycache__/health.cpython-313.pyc deleted file mode 100644 index 746b158..0000000 Binary files a/Dockers/puppeteer-api/app/routes/__pycache__/health.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/routes/browser.py b/Dockers/puppeteer-api/app/routes/browser.py index d293314..ff30d42 100644 --- a/Dockers/puppeteer-api/app/routes/browser.py +++ b/Dockers/puppeteer-api/app/routes/browser.py @@ -44,9 +44,9 @@ class Viewport(BaseModel): class InteractionsRequest(BaseModel): url: str = Field(..., description="Target URL (will be URL-decoded server-side).") - returnType: Optional[Literal["screenshot", "html"]] = Field( + returnType: Optional[Literal["screenshot", "html", "resulting_url"]] = Field( "screenshot", - description="Return a PNG screenshot or HTML content.", + description="Return a PNG screenshot, HTML content, or the resulting URL after interactions.", ) viewport: Optional[Viewport] = None scrollX: Optional[int] = None @@ -124,7 +124,8 @@ async def screenshot_url(url: str, fullPage: bool = True, x_api_key: Optional[st description=( "Run a sequence of interactions (click/type) on a page.\n\n" "- `returnType=screenshot` returns `image/png`\n" - "- `returnType=html` returns `text/html`" + "- `returnType=html` returns `text/html`\n" + "- `returnType=resulting_url` returns `application/json` with the final URL" ), responses={ 200: { @@ -158,6 +159,11 @@ async def run_interactions(payload: InteractionsRequest, x_api_key: Optional[str if isinstance(result, dict) and result.get("status") == "error": raise HTTPException(status_code=500, detail=result.get("error", "Interaction failed")) + if return_type == "resulting_url": + if not isinstance(result, dict): + raise HTTPException(status_code=500, detail="Unexpected resulting_url response") + return result + if return_type == "html": if not isinstance(result, str): raise HTTPException(status_code=500, detail="Unexpected HTML response") diff --git a/Dockers/puppeteer-api/app/services/__pycache__/__init__.cpython-313.pyc b/Dockers/puppeteer-api/app/services/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index b9172e4..0000000 Binary files a/Dockers/puppeteer-api/app/services/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/services/__pycache__/browser.cpython-313.pyc b/Dockers/puppeteer-api/app/services/__pycache__/browser.cpython-313.pyc deleted file mode 100644 index 769555b..0000000 Binary files a/Dockers/puppeteer-api/app/services/__pycache__/browser.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/services/__pycache__/cache.cpython-313.pyc b/Dockers/puppeteer-api/app/services/__pycache__/cache.cpython-313.pyc deleted file mode 100644 index 5429473..0000000 Binary files a/Dockers/puppeteer-api/app/services/__pycache__/cache.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/services/browser.py b/Dockers/puppeteer-api/app/services/browser.py index e53749a..c025307 100644 --- a/Dockers/puppeteer-api/app/services/browser.py +++ b/Dockers/puppeteer-api/app/services/browser.py @@ -183,7 +183,7 @@ async def interactions_service( scroll_x: int | None = None, scroll_y: int | None = None, ): - """Open `decoded_url`, execute click/type interactions in order, then return screenshot or HTML.""" + """Open `decoded_url`, execute click/type interactions in order, then return screenshot, HTML, or resulting_url.""" print(f"Running interactions on {decoded_url} (return_type={return_type})") async def interactions_operation(page): @@ -392,6 +392,15 @@ async def interactions_service( except Exception: pass + if return_type == "resulting_url": + final_url = unquote(page.url or "") + return { + "status": "success", + "original_url": decoded_url, + "resulting_url": final_url, + "redirected": final_url != decoded_url, + } + if return_type == "html": return await page.content() diff --git a/Dockers/puppeteer-api/app/utils/__pycache__/__init__.cpython-313.pyc b/Dockers/puppeteer-api/app/utils/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index f7f4d5f..0000000 Binary files a/Dockers/puppeteer-api/app/utils/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/utils/__pycache__/browser_utils.cpython-313.pyc b/Dockers/puppeteer-api/app/utils/__pycache__/browser_utils.cpython-313.pyc deleted file mode 100644 index e26f6e0..0000000 Binary files a/Dockers/puppeteer-api/app/utils/__pycache__/browser_utils.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/utils/__pycache__/cloudflare_bypass.cpython-313.pyc b/Dockers/puppeteer-api/app/utils/__pycache__/cloudflare_bypass.cpython-313.pyc deleted file mode 100644 index 6424e5e..0000000 Binary files a/Dockers/puppeteer-api/app/utils/__pycache__/cloudflare_bypass.cpython-313.pyc and /dev/null differ diff --git a/Dockers/puppeteer-api/app/utils/__pycache__/http_utils.cpython-313.pyc b/Dockers/puppeteer-api/app/utils/__pycache__/http_utils.cpython-313.pyc deleted file mode 100644 index c9c24f8..0000000 Binary files a/Dockers/puppeteer-api/app/utils/__pycache__/http_utils.cpython-313.pyc and /dev/null differ