Files
2025-01-27 02:16:16 +00:00
..
2025-01-27 02:16:16 +00:00

def Browser(cdp='localhost:9222', browser=type('', (), {})):
    import os, json, requests, websocket
    try: requests.get(f'http://{cdp}/json/version', timeout=0.1)
    except requests.exceptions.RequestException:
        os.popen('wsl chromium --proxy-server=172.17.112.1:8080 --ignore-certificate-errors --remote-debugging-port=9222 --remote-allow-origins=*  --user-agent="Mozilla/5.0 (Linux; Android 15) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.6834.122 Mobile Safari/537.36"')
    browser.url = requests.get(
        f'http://{cdp}/json/version').json()['webSocketDebuggerUrl']
    def send(url, request):
        ws = websocket.create_connection(url)
        try: ws.send(json.dumps(request)); return json.loads(ws.recv())
        finally: ws.close()
    
    def Page(page=type('', (), {})):
        page.url = f'ws://{cdp}/devtools/page/' + send(browser.url, {
                "id": 1,
                "method": "Target.createTarget",
                "params": {
                    "url": "about:blank",
                    "newWindow": True,
                    "background": False
            }
        })['result']['targetId']
        
        def goto(url):
            if '://' not in url: url = f'https://{url}'
            send(page.url, {
                "id": 1,
                "method": "Page.navigate",
                "params": {
                    "url": url
                }
            })

        def evaluate(javascript):
            result = send(page.url, {
                "id": 1,
                "method": "Runtime.evaluate",
                "params": {
                    "expression": javascript,
                    "returnByValue": True
                }
            })
            if 'result' in result and 'result' in result['result']:
                return result['result']['result'].get('value')
            elif 'exceptionDetails' in result['result']:
                raise Exception(f"JavaScript execution failed: {result['result']['exceptionDetails']}")

        page.goto = goto
        page.evaluate = evaluate
        return page
    browser.new_page = Page
    return browser
browser = Browser()
page = browser.new_page()
page.goto('example.org')
page.evaluate('console.log("hello, world")')