python自动化浏览器操作之WorkBuddy智能体交互测试
大家好,WorkBuddy智能体有个web页面https://www.workbuddy.cn/app,这个页面目前好像不收费...你懂的
本文通过Selenium操作这个web页面,进行后台的简单交互,即:本地python运行窗口输入一个交互词条,后台自动打开chrome,登录WorkBuddy,进行智能体对话,并获取对话的结果并再运行窗口显示出来
Selenium的安装以及和本地浏览器(chrome)的集成,可查看我上一篇内容,这里就不赘述了
WorkBuddy的页面支持对话、图片、视频、文档、等操作,这里是演示哈,只做了对话的集成,跑通了就行,其余功能应该也只是代码调试和时间的事儿
要解决几个问题:
1、WorkBuddy登录
每次打开https://www.workbuddy.cn/app都会让你登录,代码将登录信息缓存到本地cookies文件,这样只需要第一次打开WorkBuddy窗口的时候登录一次,后边只要加载之前的cookies信息
如果要更换登录用户或者之前的登录信息有变更之类的,可以调整代码中的v_first_time,配置为1即可
2、获取输入框及提交交互词条
workbuddy的输入框是变化的,初始化是一个data-slate-zero-width的span窗口,当键盘有输入keydown时,javascript会删掉data-slate-zero-width,新插入输入框,将键盘内容写入,然后"发送"按钮才可用
这块儿其实挺绕的,应该是为了防止别的工具页面套用吧,浪费不少时间,也是做了不少测试:web跟踪、断点、event监听、Selenium各种方法测试,等等..
3、返回结果的处理
web交互信息提交后,WorkBuddy会先进入"深度思考",各种网页查询,后台ai分析等,最后将“已完成”结果展示出来,也挺绕,需要不简单做页面判断
总之,浪费了我快一周时间....总算是有点眉目了,不多说直接上代码
#!/usr/bin/env python3
# coding=gbk
#
# workbuddychat.py
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import json
import time
#0:不做页面登录。第一次运行时这里改成1,然后运行时登录一下,系统会记录登录后的cookies
v_first_time=0
def workbuddychat(v_input='北京今日天气'):
loginurl="https://www.workbuddy.cn/login/?platform=agents&state=0"
chaturl="https://www.workbuddy.cn/app"
options = webdriver.ChromeOptions()
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ["enable-automation"])
driver = webdriver.Chrome(options=options)
global v_first_time
#cookies_workbuddy.json文件不存在,需要做登录
try:
with open("c:\cookies_workbuddy.json", "r"):
pass
except FileNotFoundError:
v_first_time=1
if v_first_time==1:
driver.get(loginurl)
print("首次需要登录WorkBuddy,请处理页面登录信息(20秒)....")
time.sleep(20)
cookies =driver.get_cookies()
with open("c:\cookies_workbuddy.json", "w") as f:
json.dump(cookies, f)
v_first_time=0
else:
#driver.delete_all_cookies()
driver.get(chaturl)
with open("c:\cookies_workbuddy.json", "r") as f:
cookies = json.load(f)
for cookie in cookies:
driver.add_cookie(cookie)
driver.get(chaturl)
driver.refresh()
print("等待WorkBuddy页面加载...")
#等待页面加载...
time.sleep(5)
v_div = driver.find_element(By.CSS_SELECTOR, "div._editable_1xsqb_1")
v_div.send_keys(v_input)
#v_spana = driver.find_element(By.CSS_SELECTOR, "div._editable_1xsqb_1 > p > span > span")
#driver.execute_script("arguments[0].dispatchEvent(new KeyboardEvent('keydown',{key: '1'}))", v_spana)
#driver.execute_script("arguments[0].dispatchEvent(new KeyboardEvent('keypress',{key: '1'}))", v_spana)
v_sub=driver.find_element(By.CSS_SELECTOR,"[class='_icon_981i8_1 _large_981i8_32 _customContent_981i8_42']")
ActionChains(driver).move_to_element(v_sub).click().perform()
print("词条:'"+v_input+"',已提交WorkBuddy,深度思考中....")
time.sleep(5)
v_waiteflay=1
v_result=0
while v_waiteflay < 16:
chat_stats=driver.find_elements(By.CSS_SELECTOR, "div.avatar-fold-line > span.avatar-fold-status")
if chat_stats:
if chat_stats[-1].text.startswith('已完成'):
print("WorkBuddy交互",chat_stats[-1].text)
v_result=1
break;
time.sleep(2)
v_waiteflay+=1
if v_waiteflay == 16:
print('30+秒未收到反馈,本次交互失败被认定失败!请检查网络或者系统配置...')
if v_waiteflay<16 and v_result ==1:
chat_results=driver.find_elements(By.CLASS_NAME, "_assistantTextContent_7jxnj_195")
print(chat_results[-1].text)
print('WorkBuddy退出中...')
time.sleep(3)
driver.quit()
def main(args):
print('--------python模拟web页面类操作---------')
print('--------WorkBuddy智能体交互测试---------')
while True:
print('----------------------------------------')
v_input=input("请输入WorkBuddy对话内容(0退出):")
if v_input=='0':
print('即将退出...')
break
elif v_input:
workbuddychat(v_input)
else:
print('输入内容为空,系统将默认反馈:"北京今日天气"词条的交互')
workbuddychat('北京今日天气')
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
ok,大概就是这些了,只是简单集成哈,跑的通就行:) ,如有需要再进行后续开发了
代码里有很多等待time.sleep时间哈,包括我设置了WorkBuddy交互的时长(如果30+秒就做退出),大家可以根据自己网络和硬件配置进行调整
我们看一下跑的结果
我本地之前登录过,上边视频没有做WorkBuddy登录,别的也没什么了
这个集成,大家觉得有用吗?
有需要随时微信1364125229反馈哈