寫在前面:
需提前開啟微信的webview,并保證chromedriver可以正常啟動(dòng)
很多CDP測(cè)試都是用的PC端,開啟PC端的chrome,這里主要說(shuō)一下如何與webview建立ws連接
1.啟動(dòng)chromedriver
chromedriver --url-base=wd/hub --port=8000 --adb-port=5037
啟動(dòng)后出現(xiàn)類似如下日志:chromedriver版本不同 日志內(nèi)容會(huì)不同
Starting ChromeDriver 2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363) on port 8000
Only local connections are allowed.
2.連接webview,生成websocket地址
手機(jī)微信開啟,頁(yè)面停留在webview頁(yè)面,確定當(dāng)前在chrome瀏覽器中chrome://inspect/#devices可以找到對(duì)應(yīng)的webview頁(yè)面
向chromedriver發(fā)送session
http://127.0.0.1:8000/wd/hub/session//POST發(fā)送 8000為chromedriver啟動(dòng)端口
{
"desiredCapabilities":
{
"chromeOptions":
{
"androidUseRunningApp": true,
"androidDeviceSerial": "設(shè)備id",
"androidPackage": "com.tencent.mm",//微信package
"androidProcess": "com.tencent.mm:tools"http://微信Proccess
}
}
}
3.獲取websocket地址
adb -P 5037 -s 設(shè)備id forward --list
可以得到
[設(shè)備id] tcp:52418 localabstract:webview_devtools_remote_2327
瀏覽器中打開
http://localhost:52418/json/list #52418取自上面的端口號(hào) 結(jié)果即可得到該頁(yè)面的ws地址
此時(shí)我們就可以通過(guò)CDP向webview頁(yè)面注入JS了
在python文件中通過(guò)websocket向webview傳遞js
import websocket
import json
conn = websocket.create_connection("ws://localhost:52418/devtools/page/AFB76F51539FCDBE2459D0B665CAAF51")
conn.send(json.dumps({"id": 1, "method": "Runtime.evaluate", "params": {"expression": "window.location.toString()"}}))
data = conn.recv()
print data
參考文檔:
https://chromedevtools.github.io/devtools-protocol/tot/Runtime
# ATX 利用 Chrome Dev Tools 進(jìn)行 WebView 的測(cè)試 (初級(jí)版本)
Appium測(cè)試WebView切換context:為什么Android System Webview升級(jí)之后仍然報(bào)出chrome version版本過(guò)低問(wèn)題
Android Webview 基于chromedriver 查看具體頁(yè)面pagesource