From cf80f44edcea19bdf0b6b9a5acf1771bdc32a3df Mon Sep 17 00:00:00 2001 From: jay817 Date: Mon, 27 Jan 2025 02:16:16 +0000 Subject: [PATCH] Add browser/README.md --- browser/README.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 browser/README.md diff --git a/browser/README.md b/browser/README.md new file mode 100644 index 0000000..9149cf4 --- /dev/null +++ b/browser/README.md @@ -0,0 +1,58 @@ +```python +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")') +``` \ No newline at end of file