Build a CloakBrowser Automation Workflow with Stealth Chromium, Persistent Profiles, and Browser Signal Inspection


def cloakbrowser_tutorial_job():
   results = {
       "basic_launch": None,
       "advanced_context": None,
       "storage_restore": None,
       "persistent_profile": None,
       "rendered_extraction": None,
       "static_parsing": None,
       "errors": [],
   }


   print_section("1. Basic CloakBrowser launch")


   browser = None


   try:
       browser = launch(
           headless=True,
           humanize=True,
           args=[
               "--no-sandbox",
               "--disable-dev-shm-usage",
           ],
       )


       page = browser.new_page()
       page.goto("https://example.com", wait_until="domcontentloaded", timeout=60000)


       results["basic_launch"] = {
           "title": page.title(),
           "body_preview": page.locator("body").inner_text(timeout=15000)[:300],
           "url": page.url,
       }


       print(json.dumps(results["basic_launch"], indent=2))


   except Exception as e:
       error = {
           "section": "basic_launch",
           "error": repr(e),
       }
       results["errors"].append(error)
       print(error)


   finally:
       safe_close(browser, "basic browser")


   print_section("2. Advanced context launch with custom browser context")


   context = None


   try:
       context = launch_context(
           headless=True,
           humanize=True,
           viewport={"width": 1365, "height": 768},
           locale="en-US",
           timezone_id="America/New_York",
           color_scheme="light",
           extra_http_headers={
               "Accept-Language": "en-US,en;q=0.9",
               "X-Tutorial-Run": "cloakbrowser-colab",
           },
           args=[
               "--no-sandbox",
               "--disable-dev-shm-usage",
           ],
       )


       page = context.new_page()
       page.goto(TEST_PAGE_URL, wait_until="domcontentloaded", timeout=60000)


       page.locator("#name").fill("CloakBrowser Colab User")
       page.locator("#message").fill(
           "We are testing safe local browser automation in Google Colab."
       )
       page.locator("#submit").click()


       page.wait_for_timeout(1000)


       signals = page.evaluate("() => collectSignals()")
       status_text = page.locator("#status").inner_text()


       page.screenshot(path=str(SCREENSHOT_PATH), full_page=True)
       context.storage_state(path=str(STORAGE_STATE_PATH))


       results["advanced_context"] = {
           "status_text": status_text,
           "signals": signals,
           "screenshot_path": str(SCREENSHOT_PATH),
           "storage_state_path": str(STORAGE_STATE_PATH),
       }


       print(json.dumps(results["advanced_context"], indent=2, default=str))


   except Exception as e:
       error = {
           "section": "advanced_context",
           "error": repr(e),
       }
       results["errors"].append(error)
       print(error)


   finally:
       safe_close(context, "advanced context")


   print_section("3. Restore localStorage using storage_state")


   restored_context = None


   try:
       restored_context = launch_context(
           headless=True,
           humanize=True,
           storage_state=str(STORAGE_STATE_PATH),
           viewport={"width": 1365, "height": 768},
           locale="en-US",
           timezone_id="America/New_York",
           args=[
               "--no-sandbox",
               "--disable-dev-shm-usage",
           ],
       )


       restored_page = restored_context.new_page()
       restored_page.goto(TEST_PAGE_URL, wait_until="domcontentloaded", timeout=60000)


       restored_values = restored_page.evaluate("""
       () => ({
         tutorial_name: localStorage.getItem("tutorial_name"),
         tutorial_message: localStorage.getItem("tutorial_message"),
         cloakbrowser_test: localStorage.getItem("cloakbrowser_test")
       })
       """)


       results["storage_restore"] = restored_values


       print(json.dumps(restored_values, indent=2))


   except Exception as e:
       error = {
           "section": "storage_restore",
           "error": repr(e),
       }
       results["errors"].append(error)
       print(error)


   finally:
       safe_close(restored_context, "restored context")



Source link

  • Related Posts

    Anthropic Introduces Natural Language Autoencoders That Convert Claude’s Internal Activations Directly into Human-Readable Text Explanations

    When you type a message to Claude, something invisible happens in the middle. The words you send get converted into long lists of numbers called activations that the model uses…

    OpenAI Releases Three Realtime Audio Models: GPT-Realtime-2, GPT-Realtime-Translate, and GPT-Realtime-Whisper in the Realtime API

    OpenAI released three new audio models through its Realtime API, each targeting a distinct capability in live voice applications: GPT-Realtime-2 for voice agents with reasoning, GPT-Realtime-Translate for live speech translation,…

    Leave a Reply

    Your email address will not be published. Required fields are marked *