内容简介:记录一下省的忘记了,遍看源码,边猜测,边实验目前Android WebView支持主要还是靠ChromeDriver来实现的。Chromedriver貌似一定要ADB才行。其中用到了命令有
记录一下省的忘记了,遍看源码,边猜测,边实验
chromedriver用了哪些命令和资源
目前Android WebView支持主要还是靠ChromeDriver来实现的。
Chromedriver貌似一定要ADB才行。其中用到了命令有 ps , grep , adb forward , am start 等等
既然还用到了 adb forward .. localabstract , 先打开一个带webview的app(这里用了微信)
查看下有哪些服务监听了localabstract
$ cat /proc/net/unix | grep @ 0000000000000000: 00000002 00000000 00010000 0001 01 32803 @bthcitraffic 0000000000000000: 00000002 00000000 00010000 0001 01 3789231 @chrome_devtools_remote 0000000000000000: 00000002 00000000 00010000 0001 01 32963 @/data/misc/bluedroid/.a2dp_ctrl 0000000000000000: 00000002 00000000 00010000 0001 01 76 @time_genoff 0000000000000000: 00000002 00000000 00010000 0001 01 88 @android:debuggerd 0000000000000000: 00000002 00000000 00010000 0001 01 4640516 @webview_devtools_remote_13680 0000000000000000: 00000002 00000000 00010000 0001 01 17596 @jdwp-control 0000000000000000: 00000003 00000000 00000000 0001 03 4453235 @jdwp-control 0000000000000000: 00000003 00000000 00000000 0001 03 4250761 @jdwp-control
其中 @ 符号代码监听的本地Unix socket
这里看到有两个 @chrome_devtools_remote 和 @webview_devtools_remote_13680 比较吸引人。
chrome_devtools_remote 应该对应的是浏览器。
webview_devtools_remote_13680 对应的应该是应用内的WebView,根据源码感觉这个13680应该是个pid
odin:/ $ ps | grep 13680 USER PID PPID VSIZE RSS WCHAN PC NAME u0_a280 13680 591 2522104 168072 SyS_epoll_ 0000000000 S com.tencent.mm:tools
com.tencent.mm 这个应该就是微信了。
先把这个forward到本地
$ adb forward tcp:5000 localabstract:webview_devtools_remote_13680
看chromedriver的代码,里面自带一些http接口,具体看下面的代码
https://github.com/bayandin/chromedriver/blob/33218feb63bc972c7175390ee2302fe5a2f25056/chrome/devtools_http_client.cc#L92有个比较简单的接口获取浏览器的版本号,以此来确定该使用的chromedriver版本。
$ curl localhost:5000/json/version
{
"Android-Package": "com.tencent.mm",
"Browser": "Chrome/57.0.2987.132",
"Protocol-Version": "1.2",
"User-Agent": "Mozilla/5.0 (Linux; Android 7.1.1; OD103 Build/NMF26F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044205 Mobile Safari/537.36",
"V8-Version": "5.7.492.72",
"WebKit-Version": "537.36 (@user1128ad40ab2e3d761c06d1)"
}
从这个链接里面可以看到没有Chrome Version( 57 )对应的应该使用的chromedriver版本号( 2.29 ) https://chromedriver.storage.googleapis.com/2.41/notes.txt
去这个地址下载 https://npm.taobao.org/mirrors/chromedriver
继续更新
猜测:除了微信有个调试的按钮,其他的H5的应用应该也是可以的吧。
先试了试Appium自带的demo apk
安装到手机上之后,进入 Views -> WebView ,然后看到这么一个简单的界面
图层结构显示也有Hierarchy
Chrome浏览器打开 chrome://inspect
更多相关的内容参考谷歌的Chrome-Devtools文档 https://developers.google.com/web/tools/chrome-devtools/remote-debugging/?hl=zh-cn
使用VXP强制开始WebView
那有没有强制开启的方法呢? 很快谷歌出来一篇文章
强制开启android webview debug模式使用Chrome inspect看来手机需要Root才行,还用到了高端的Xposed(不对呀,我明明记得可以不用root的呀),继续谷歌了下发现还有个VirtualXposed可以不用root
相关的VirtualXposed(简称VXP)简介 https://github.com/android-hacker/VirtualXposed
安装很简单,跟普通的App一样,下载apk到手机,安装就ok了。
接下来用VXP自带的安装器,安装 ApiDemos-debug.apk
然后再安装个插件 WebViewDebugHook 同样是个Apk下载,用VXP安装上就好了。
关于那个插件的原理可以在这里看到 https://www.jianshu.com/p/d6699cd4505e
安装上之后,先打开
进入到 模块 中,勾选
返回,然后向下滑动,进入到这个界面,点击箭头位置
拖到最下面点击 重启 是插件更改生效。
PS: 使用VXP安装的应用 pm list packages 是看不到的,只有在运行的时候用 ps 才可以查看到
回到应用界面,点击刚才安装的APK API Demos , 重新进入到WebView,然后打开 chrome://inspect
这个时候终于看到了,期望的界面。
应用使用的Chrome版本是 62.0.3202.84
Appium的代码里面有个对应的表可以直接查改用哪一个 chromedriver https://github.com/appium/appium-chromedriver/blob/master/lib/chromedriver.js#L20
PS D:\Temp> .\chromedriver.exe -h Usage: D:\Temp\chromedriver.exe [OPTIONS] Options --port=PORT port to listen on --adb-port=PORT adb server port --log-path=FILE write server log to file instead of stderr, increases log level to INFO --log-level=LEVEL set log level: ALL, DEBUG, INFO, WARNING, SEVERE, OFF --verbose log verbosely (equivalent to --log-level=ALL) --silent log nothing (equivalent to --log-level=OFF) --version print the version number and exit --url-base base URL path prefix for commands, e.g. wd/url --whitelisted-ips comma-separated whitelist of remote IPv4 addresses which are allowed to connect to Chr omeDriver
chromedriver默认监听9515端口。
先来段简单的代码试试。获取WebView中显示的内容
# coding: utf-8
from selenium import webdriver
options = {'androidPackage': 'com.appium.android.apis', 'androidUseRunningApp': True}
d = webdriver.Remote("http://localhost:9515", {"chromeOptions": options})
# /html/body/a
el = d.find_element_by_xpath("/html/body/a")
print(el.text)
运行,之后就报错了,提示
WebDriverException: Message: unknown error: com.appium.android.apis is not installed on device 3578298f (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.16299 x86_6 4)
估计是通过 pm path <package)name> 判断的有没有安装,也罢,再安装一遍好了。然后给options加了 androidProcess 参数
options = {
'androidPackage': 'io.appium.android.apis',
'androidUseRunningApp': True,
'androidProcess': 'io.appium.android.apis'
}
重新再运行代码终于出来了
Hello World! - 1
哎,真是麻烦。。 -~~
参考
- chromedriver官方简短的使用说明
- 微信 webview 的自动化技术
- chromedriver源码
- ATX 文档 - Android WebView 支持说明
- ATX-uiautomator2 实现 webview 的操作
- 使用Xposed强制android WebView开启debug模式
- 谷歌文档-远程调试 WebView
- Appium的chromedriver库 https://github.com/appium/appium-chromedriver
- NB的VXP项目 https://github.com/android-hacker/VirtualXposed
- 通过ADB控制VXP
- Chromedriver淘宝镜像
以上所述就是小编给大家介绍的《Android WebView 研究笔记》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Golang 热更新研究笔记
- 吴恩达《机器学习》笔记,哥大研究生献上
- 安全研究 | 传真机的攻击面研究报告
- IBM将建新AI研究中心,旨在开展“颠覆性研究项目”
- 清华人工智能研究院成立「知识智能研究中心」,发布四大知识平台
- 姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Mining
Jiawei Han、Micheline Kamber、Jian Pei / Morgan Kaufmann / 2011-7-6 / USD 74.95
The increasing volume of data in modern business and science calls for more complex and sophisticated tools. Although advances in data mining technology have made extensive data collection much easier......一起来看看 《Data Mining》 这本书的介绍吧!