Loading...
Loading...
通过 Chrome 扩展控制真实浏览器。需要访问网页、抽取网页数据、点击按钮、填写表单、执行浏览器自动化、提取渲染后的组件证据,或以程序方式操作页面时使用。通过 DOM diff、简化 HTML 和 component evidence pack 返回节省 token 的结构化结果。适用于 browser control、web automation、page scraping、web data extraction、execute JS in browser、web_scan、web_execute_js、open browser、navigate to URL、get page content、fill form、click button、extract component、rendered DOM、computed styles、component evidence。
npx skill4agent add liuzhengdongfortest/codestable browser-bridgepython <skill-dir>/scripts/browser.py tabsCLI (browser.py) -> Python (TMWebDriver) <-WebSocket-> Chrome 扩展 <-CDP/scripting-> 浏览器 Tabws://127.0.0.1:18765pip install bs4 simple-websocket-server bottle requestschrome://extensions/<skill-dir>/assets/extension/ljq_driver: connected<skill-dir>/scripts/browser.py<skill-dir>SKILL.mdpython <skill-dir>/scripts/browser.py exec "<javascript>"--tab <id>--no-monitor--wait <selector>--wait-ms <ms>--wait10000--timeout <s>15# 获取页面标题
python <skill-dir>/scripts/browser.py exec "document.title"
# 点击元素并查看页面变化
python <skill-dir>/scripts/browser.py exec "document.querySelector('.submit-btn').click()"
# 抽取结构化数据
python <skill-dir>/scripts/browser.py exec "Array.from(document.querySelectorAll('.item')).map(e=>({name:e.querySelector('.name')?.textContent,price:e.querySelector('.price')?.textContent}))"
# 填写表单字段,并触发 React/Vue 绑定
python <skill-dir>/scripts/browser.py exec "const e=document.querySelector('#email');e.value='u@x.com';e.dispatchEvent(new Event('input',{bubbles:true}))"
# 向下滚动
python <skill-dir>/scripts/browser.py exec "window.scrollBy(0,800)"
# 等待元素出现后再交互
python <skill-dir>/scripts/browser.py exec --wait ".loaded" "return document.querySelector('.loaded').textContent"
# 长时间操作
python <skill-dir>/scripts/browser.py exec --timeout 30 "await fetch('/api/slow'); return 'done'"statussuccessfailedjs_returnouterHTMLdifftransientsnewTabstab_iderrorreloadedsuggestionpython <skill-dir>/scripts/browser.py scan # 简化 HTML + tab 列表
python <skill-dir>/scripts/browser.py scan --tabs-only # 只返回 tab 列表,不返回 HTML
python <skill-dir>/scripts/browser.py scan --text-only # 只返回文本,token 最少
python <skill-dir>/scripts/browser.py scan --size-only # 只返回内容大小,用于确认页面是否渲染
python <skill-dir>/scripts/browser.py scan --tab <id> # 扫描指定 tab
python <skill-dir>/scripts/browser.py scan --wait ".result-card" # 等待 SPA 内容出现statussuccesserrorhtmltabs-onlysize-onlyurltab_idsessionssizesize-onlymsgpython <skill-dir>/scripts/browser.py tabs
# -> {"status":"success","sessions":[{"id":"123","url":"https://...","title":"..."},...]}python <skill-dir>/scripts/browser.py navigate "https://example.com"
python <skill-dir>/scripts/browser.py navigate "https://example.com" --no-wait # 跳过加载等待{"status":"success","navigated_to":"https://...","loaded":true}python <skill-dir>/scripts/browser.py backpython <skill-dir>/scripts/browser.py forwardpython <skill-dir>/scripts/browser.py reloadpython <skill-dir>/scripts/browser.py newtab
python <skill-dir>/scripts/browser.py newtab "https://example.com"tab_idtab--tabpython <skill-dir>/scripts/browser.py close
python <skill-dir>/scripts/browser.py close <tab_id>python <skill-dir>/scripts/browser.py switch "github"
# -> {"status":"success","session_id":"456"}tabspython <skill-dir>/scripts/browser.py screenshot
python <skill-dir>/scripts/browser.py screenshot page.png{"status":"success","filepath":"/tmp/screenshot_1714650000.png"}evidencepython <skill-dir>/scripts/browser.py evidence 'button[role="switch"]' --name Switch --out component-evidence/switch
python <skill-dir>/scripts/browser.py evidence '[data-slot="switch"]' --name Switch --index 0 --depth 4
python <skill-dir>/scripts/browser.py evidence '.tabs-root' --name Tabs --wait '.tabs-root' --wait-ms 8000--name <name>--out <dir>component-evidence/<name>--index <n>0--depth <n>4--tab <id>--wait <selector>--wait-ms <ms>--all-stylescomponent-evidence/<name>/
README.md
metadata.json
dom.html
attributes.json
class-list.txt
box-model.json
computed-styles.json
anatomy.json
screenshot.png
page.pngrolearia-*data-statedata-sizedata-slotevidencereference.mdgrok.md