场景:最近因工作需要,要在通义千问大模型平台创建自己的智能体。话说其本身创建流程并不复杂,名称、简介、开场白等等这些数据也都是准备好的,但创建数量居多,也着实令人头大!!!
于是乎,我准备写一个自动化脚本来帮助我创建这些该s的智能体。接下来,说干就干!
1.环境准备
首先,我们先查看一下自己谷歌浏览器的版本。方法:打开谷歌浏览器=》右上角三个小圆点=》帮助=》关于Google Chrome
看到浏览器版本之后,接着我们要去下载对应的谷歌驱动程序。(注意:下载高版本和低版本的驱动都不行,一定下载和浏览器版本对应的驱动版本)
最新版本下载地址:https://googlechromelabs.github.io/chrome-for-testing/,找到对应的版本下载下来即可。
113.x.x.x-133.x.x.x版本下载地址:https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
老版本下载地址:CNPM Binaries Mirror (npmmirror.com)
压缩包下载完成后,先解压出来备孕!接着我们打开jupyter notebook,创建我们工程的目录。创建好后把驱动程序拷进来!
恭喜你,你已经完成了复杂的环境准备工作!👏👏👏
2.程序编写
接下来我会分两个程序来说明,第一个程序的目的是收集登录的cookie,方便第二个程序跳过登录操作。第二个程序的目的则是创建通义千问智能体。
第一个程序:
#1.导包
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.common.exceptions import InvalidCookieDomainException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
import time
import json
#2.初始化环境
chrome_options = webdriver.ChromeOptions()
chrome_driver_path = r"C:\Users\Administrator\AppData\Local\Google\Chrome\Bin\chromedriver.exe"
service = Service(executable_path=chrome_driver_path)
browser = webdriver.Chrome(service=service, options=chrome_options)
#3.打开通义千问网页,窗口最大化
browser.get("https://tongyi.aliyun.com/qianwen/agent/chat?agentId=A-59195-2e80e42d")
browser.maximize_window()
#4.点击登录div
# 假设 driver 已经初始化
wait = WebDriverWait(browser, 10) # 等待最长10秒
# 先等待元素存在,再等待元素可点击
element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.sc-fufdwm.dwjJOT')))
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.sc-fufdwm.dwjJOT')))
element.click()
#5.获取登录cookie,先执行此段代码,再回到浏览器手动登录通义千问平台(必须淘宝扫码登录)
flag = True
print("等待登录……")
while flag:
try:
browser.find_element(By.XPATH,
"//div[@class='sc-dntaoT DZpVO popupUser']|//ul[@class='sc-UblHX jcunVE']"
"//a[@class='header-entry-avatar']")
flag = False
except NoSuchElementException as e:
time.sleep(3)
print("已登录,现在为您保存cookie...")
with open('cookie.txt', 'w', encoding='u8') as f:
json.dump(browser.get_cookies(), f)
browser.close()
print("cookie保存完成,游览器已自动退出...")
第二个程序:
#1.导包
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.common.exceptions import InvalidCookieDomainException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from pywinauto import Application
import time
import json
#2.初始化驱动,打开浏览器
chrome_options = webdriver.ChromeOptions()
chrome_driver_path = r"C:\Users\Administrator\AppData\Local\Google\Chrome\Bin\chromedriver.exe"
service = Service(executable_path=chrome_driver_path)
browser = webdriver.Chrome(service=service, options=chrome_options)
#3.使用上个程序收集到的cookie跳过登录
with open('cookie.txt', 'r', encoding='u8') as f:
cookies = json.load(f)
browser.get("https://tongyi.aliyun.com/qianwen/agent/chat?agentId=A-59195-2e80e42d")
browser.maximize_window()
for cookie in cookies:
browser.add_cookie(cookie)
browser.get("https://tongyi.aliyun.com/qianwen/agent/chat?agentId=A-59195-2e80e42d")
#4.模拟创建智能体步骤-1
# 定位左下角的【创建智能体】并点击
wait = WebDriverWait(browser, 10) # 等待最长10秒
# 先等待元素存在,再等待元素可点击
element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.footerCreate--O0qBvW7w')))
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.footerCreate--O0qBvW7w')))
element.click()
# 定位新页面左上角的【自由创建】并点击
wait = WebDriverWait(browser, 10) # 等待最长10秒
# 先等待元素存在,再等待元素可点击
element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.iconContainer--sd0RHDOt')))
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.iconContainer--sd0RHDOt')))
element.click()
#5.模拟创建智能体步骤-2
name_input = browser.find_element('id', 'name')
name_input.send_keys('智能体名称')
js_input = browser.find_element('id', 'instructions')
js_input.send_keys("智能体介绍")
jj_input = browser.find_element('id', 'description')
jj_input.send_keys('智能体简介')
kcb_input = browser.find_element('id', 'prologue')
kcb_input.send_keys('智能体开场白')
#添加问题
for i in range(2):
wait = WebDriverWait(browser, 10) # 等待最长10秒
# 先等待元素存在,再等待元素可点击
element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.btnContainer--yylA8M6B')))
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btnContainer--yylA8M6B')))
element.click()
wt_inputs = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'input.ant-input.css-tqs4ck')))
# 逐个填充值
values = ['问题1', '问题2', '问题3'] # 将这里替换为你要填充的实际值列表
for i in range(len(wt_inputs)-1):
wt_inputs[i+1].send_keys(values[i])
# 定位右上角的【创建】并点击
wait = WebDriverWait(browser, 10) # 等待最长10秒
# 先等待元素存在,再等待元素可点击
element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.cursor-pointer.whitespace-nowrap.select-none.tongyi-ui-button.tongyi-ui-button-primary.btn--vc8x4xOY')))
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.cursor-pointer.whitespace-nowrap.select-none.tongyi-ui-button.tongyi-ui-button-primary.btn--vc8x4xOY')))
time.sleep(2)
element.click()
将第二个程序里面的变量替换成自己的数据,依次执行即可!
注意:上述代码是临时编写的,很多地方写的不够完美,甚至不够好。
比如:
- 头像以及知识库文件上传自动化没有做,这两个文件需要手动上传;
- 模拟点击操作没有封装成方法,造成的代码冗余;
- 名称、简介、开场白等信息没有做成数组;
- 等等等等;
希望大家先将就看,大佬们也可以根据我描述的做进一步改进,后续如果我有时间会整理一下再更新到本篇文章中!感谢各位大佬!