Add browser/README.md
This commit is contained in:
58
browser/README.md
Normal file
58
browser/README.md
Normal file
@@ -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")')
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user