盘点Python自动化微信小程序遇到的坑
1.场景
我之前写过微信小程序的不同使用方式。对于有源码的小程序,建议使用微信的开放SDK进行自动化,否则只能使用native或WebView方法。 最近在使用Python + Appium在微信小程序中运行一个自动化项目。我遇到了很多问题,也一一解决了。 这篇文章我会告诉你微信小程序自动化有哪些陷阱?2。访问小程序
对于大多数人来说,使用小程序的方式是下拉微信主界面屏幕,然后选择目标小程序的图标,打开程序应用而且,由于显示小程序在屏幕上的位置不固定,会影响自动化程序的稳定性 def swipe_down(step):# 屏幕宽度
x = ()['width']# 屏幕height
y = ()['height']
# x 轴和 y 轴起始坐标
x1 = int(x * )
y1 = int(y * )
# 结束 y 轴坐标
y2 = int(y * (+ step))
# 向下滑动屏幕
(x1, y1, x1, y2, 1000)
# 向下滑动屏幕screen
swipeDown( )
#找到目标小程序的图标元素,从上方进入小程序
#pass这里推荐另一种方式。 具体步骤为:先将目标小程序转发到文件传输助手,然后将文件传输助手设置为置顶消息这样只需点击第一个消息项即可进入消息文件传输助手页面,然后点击最后一条消息进入小程序页面chat_record_elements = ("")# 进入文件传输助手聊天页面
,查看chat_record_elements中的项目:
chat_record_name =
if chat_record_name == '文件传输助手':
()
break
def find_element_by_id_and_text (driver: webDriver, id, text):
"" "
按 id 和文本内容查找元素
: param driver:
: param id:
: :
:返回:
"""
结果 = 无
元素 = (id)
if 元素:
对于elements中的item:
if == text:
result = item
break
返回结果
#点击小程序打开目标应用
mini_program_tag = find_element_by_id_and_ text(driver , '', '160注册丨预约健康医疗服务平台')
3.查看网页元素
由于小程序是基于腾讯的WebView。在聊天记录中,点击链接可以跳转到是否使用低版本微信。 、查看小程序页面元素因此,如果您的设备无法使用上述方法查看网页元素,建议下载微信播放版,root后安装XP框架和WebViewDebugHook插件,并强制安装调试功能被启用。 下载地址:https://github.com/feix760/WebViewDebugHook4. ChromeDriver版本对应
正常使用appium命令打开打开Appium Server时,使用系统默认的ChromeDriver。打开appium serverappium 如果ChromeDriver版本与微信WebView版本不一致,会报如下错误




#显示输入某个版本chromedriver
appium --chromedriver-executable /Users/xingag/Desktop/test/chromedriver29
5。上下文与流程
由于微信有多个上下文,所以需要对网页控件进行控制。为了让它工作,您必须首先切换到相应的上下文和Selenium类型。您只需要找到所有上下文并过滤掉当前适用的上下文即可。 为了保证能够正确获取上下文,最好在强行等待几秒之前获取到#所有上下文print()#切换到对应的Web上下文
('' ) 另一个陷阱是小程序只在其他进程中运行。如果没有显式指定正在运行的进程,上下文切换将会失败。 解决方法如下:先打开小程序界面然后使用adb命令在栈顶找到activity对应的pid然后使用pid值查找小程序的进程名称# 当前activity在栈顶的进程
adb shell dumpsys Activity top | group 21 60 sys_epoll_ 00000000 S
# 小程序进程名称:最后在Appium启动配置项中添加chromeOptions项,用于指定目标小程序的活跃进程#微信个人资料
caps = {
“平台名称”:“Android”,
“设备名称”:“ca2b3455”,
“appPackage”:'',
“appActivity”:'.ui.LauncherUI',
“ autoGrantPermissions": True,
# 指定目标小程序的进程名称
"chromeOptions": {
"androidProcess": ""
},
"noReset": True
}
6。切换表单句柄
更改上下文后,可以操作当前页面的元素控件。但如果发生页面跳转,表单可能会发生变化,直接查找元素会失败因此,对于WebView页面内的元素操作,一般可以先获取所有窗口句柄,循环切换到各个窗口句柄,直到找到该元素 请注意,如果是单页编辑,则不需要这样做。切换到表单手柄def find_element_by_web(driver: WebDriver, by: By, 选择器):"""
在 Web 视图中查找元素涉及切换窗口句柄:handle
:return:
"""
# 获取所有句柄
all_handles =result_element = None
for handle in all_handles:
try:
(handle)
# 搜索方法
if by == :
结果_元素= (, 选择器)
elif by == :
result_element = (, 选择器)
print('查找成功,立即返回')
break
except 异常 if e:
print('搜索失败,继续搜索')
通过
返回result_element
7.最后
使用Appium自动化微信小程序时会遇到的坑主要是以上这些;其他操作和原生、混合应用类似,这里不再详细解释。版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。