Commit 7394c5da by lei

1

parent cf0fa24e
This diff is collapsed. Click to expand it.
...@@ -17,6 +17,12 @@ import json ...@@ -17,6 +17,12 @@ import json
from multiprocessing import Process from multiprocessing import Process
import random import random
# 获取当前时间
def get_current_time():
# 返回秒级时间戳
return int(time.mktime(time.localtime(time.time())))
class ToWork: class ToWork:
def __init__(self): def __init__(self):
self.init_prompt = '/imagine' self.init_prompt = '/imagine'
...@@ -34,15 +40,26 @@ class ToWork: ...@@ -34,15 +40,26 @@ class ToWork:
ActionChains(dricer).send_keys(Keys.CONTROL, value).perform() ActionChains(dricer).send_keys(Keys.CONTROL, value).perform()
# 元素出现的循环次数 # 元素出现的循环次数
def CheckElement(self, dricer, type, value, num=10): def CheckElement(self, dricer, type, value, num=10, check_type='only'):
for i in range(num): for i in range(num):
element = self.sleepElementShow(dricer, type, value) if check_type == 'only':
if element: element = self.sleepElementShow(dricer, type, value)
# 随机等待 if element:
self.random_sleep(1, 2) # 随机等待
return element self.random_sleep(1, 2)
return element
else:
# 列表
element = self.sleepElementListShow(dricer, type, value)
if element:
# 随机等待
self.random_sleep(1, 2)
return element
time.sleep(1) time.sleep(1)
return False
# 等待元素出现--自定义 # 等待元素出现--自定义
def sleepElementShow(self, dricer, type, value): def sleepElementShow(self, dricer, type, value):
try: try:
...@@ -53,6 +70,24 @@ class ToWork: ...@@ -53,6 +70,24 @@ class ToWork:
except Exception as e: except Exception as e:
return False return False
# 找元素,只找一次,不等待
def FindElement(self, custom_el, find_type, value):
try:
el = custom_el.find_element(find_type, value)
return el
except Exception as e:
return False
# 获取元素列表
def sleepElementListShow(self, dricer, type, value):
try:
element = dricer.find_elements(type, value)
if element:
return element
return False
except Exception as e:
return False
# 元素点击 # 元素点击
def ElementClick(self, dricer, type, value, name=''): def ElementClick(self, dricer, type, value, name=''):
try: try:
...@@ -74,6 +109,35 @@ class ToWork: ...@@ -74,6 +109,35 @@ class ToWork:
# 循环输入指令 # 循环输入指令
def enter_prompt(self, dricer, tasks): def enter_prompt(self, dricer, tasks):
if True:
# 获取开始时间
start_time = get_current_time()
while True:
# 再次获取当前时间
current_time = get_current_time()
# 最多等待一分钟
if current_time - start_time >= 60:
# end
break
# 开始判断
element = '//ol[@data-list-id="chat-messages"]/li'
# 消息列表
message_list = self.CheckElement(dricer, 'xpath', element, 20, 'list')
if message_list:
logger.info('消息列表存在')
# 找到所有子元素
for e in message_list:
logger.info(e.get_attribute('id'))
# 找到文本并匹配
path = '//div[contains(@data-list-item-id, "chat-messages___chat-messages")]'
label_element = self.FindElement(e, By.XPATH, path)
if label_element:
logger.info(label_element.get_attribute('data-list-item-id'))
else:
logger.info('未找到文本')
logger.info('等待300秒')
time.sleep(300)
return
# task是一个列表 # task是一个列表
for task in tasks: for task in tasks:
# 输入初始指令 # 输入初始指令
...@@ -86,13 +150,35 @@ class ToWork: ...@@ -86,13 +150,35 @@ class ToWork:
if element: if element:
status = self.ElementClick(dricer, 'xpath', prompt_el, '选择指令') status = self.ElementClick(dricer, 'xpath', prompt_el, '选择指令')
if status: if status:
self.driver_paste(dricer, task['prompt']) change_prompt = task['prompt']
# 图片链接
prompt_img = task['prompt_img']
if task['type'] == 1 and prompt_img and len(json.loads(prompt_img)):
prompt_img = json.loads(prompt_img)
st = ''
for item in prompt_img:
# 加入图片-链接
st += ' ' + item
change_prompt = st + ' ' + change_prompt
self.driver_paste(dricer, change_prompt)
# 回车 # 回车
ActionChains(dricer).send_keys(Keys.ENTER).perform() ActionChains(dricer).send_keys(Keys.ENTER).perform()
time.sleep(2) time.sleep(2)
# 输入完成,循环获取生成成功后的链接 # 输入完成,循环获取生成成功后的链接
# 获取当前事件 # 获取开始时间
start_time = get_current_time()
while True: while True:
# 再次获取当前时间
current_time = get_current_time()
# 最多等待一分钟
if current_time - start_time >= 60:
# end
break
# 开始判断
message_list = '//*[@data-list-id="chat-messages"]'
...@@ -134,7 +220,7 @@ class ToWork: ...@@ -134,7 +220,7 @@ class ToWork:
logger.info('打开窗口') logger.info('打开窗口')
dricer.get('https://discord.com/channels/@me') dricer.get('https://discord.com/channels/@me')
# dricer.get('https://discord.com/login') # dricer.get('https://discord.com/login')
return True return dricer
except Exception as e: except Exception as e:
logger.error(e) logger.error(e)
return False return False
...@@ -146,21 +232,21 @@ class ToWork: ...@@ -146,21 +232,21 @@ class ToWork:
tasks = self.get_current_tasks() tasks = self.get_current_tasks()
if len(tasks): if len(tasks):
# 打开窗口 # 打开窗口
browser_status = self.open_browser(browser_item) dricer = self.open_browser(browser_item)
if not browser_status: if not dricer:
# 浏览器打开失败 # 浏览器打开失败
logger.error(f'{browser_item["num"]},窗口打开失败,检查代理ip') logger.error(f'{browser_item["num"]},窗口打开失败,检查代理ip')
else: else:
# 开始执行任务 # 开始执行任务
statsu = self.run_task(browser_item, tasks) status = self.run_task(browser_item, tasks, dricer)
if statsu == False: if status == False:
logger.info('请检查自动化') logger.info('请检查自动化')
else: else:
time.sleep(3) time.sleep(3)
logger.info('不存在任务,等待3秒') logger.info('不存在任务,等待3秒')
def run_task(self, browser_item, tasks): def run_task(self, browser_item, tasks, dricer):
try: try:
logger.info('等待登录成功') logger.info('等待登录成功')
# 判断页面是否加载完成 # 判断页面是否加载完成
...@@ -229,17 +315,17 @@ if __name__ == '__main__': ...@@ -229,17 +315,17 @@ if __name__ == '__main__':
'num': 7, 'num': 7,
'id': '1115ce586624431a8b7bcba8b1e82035' 'id': '1115ce586624431a8b7bcba8b1e82035'
}, },
{ # {
# 9 # # 9
'num': 9, # 'num': 9,
'id': 'db474b6936a24a7a949377a6d90b4dcb' # 'id': 'db474b6936a24a7a949377a6d90b4dcb'
} # }
] ]
# #
l = [] l = []
for item in browser_list: for item in browser_list:
p = Process(target=bro.OpenBros, args=(item,)) p = Process(target=bro.on_start, args=(item,))
p.start() p.start()
l.append(p) # 将进程加入列表中,这样 5 个子进程就会全部执行 l.append(p) # 将进程加入列表中,这样 5 个子进程就会全部执行
......
# 获取浏览器窗口
async def browser(self, browser_id):
"""
:return:
"""
self.browser_id = browser_id
ws = await self.bit_get_ws()
return await pyppeteer.connect({
"browserWSEndpoint": ws
})
import asyncio import asyncio
import json import json
import time import time
import requests
import re
import openai import openai
from loguru import logger from loguru import logger
from Helper import RedisCon, Helper from Helper import RedisCon, Helper
# key # key
api_key = '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' api_key = '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'
# 组织标识 # 组织标识
organization = 'org-ZMM4WGwi3vmM7o5y51IljTcW' organization = 'org-cflsyp3YsvDovzOu3g8G9OFS'
# 回调接口 # 回调接口
def gpt_callback(res_prompt, task): def gpt_callback(res_prompt, task):
url = task['callback'] try:
print(1) url = task['callback']
if len(res_prompt):
params = {
'prompt': json.dumps(res_prompt),
'user_id': task['user_id'],
'task_id': task['task_id'],
'prompt_img': task['prompt_img'],
'type': task['type'],
}
res = requests.post(url, data=params)
else:
logger.error(f'指令任务不正确,{res_prompt}')
except Exception as e:
logger.error(e)
# 拆分指令
def split_prompt(response, task):
try:
text = response.choices[0].text
if text:
# 使用正则定义分隔符
pattern = r'\n[1-9]{1,2}.*.'
# 拆分字符串
chemical_list = re.findall(pattern, text)
for i in range(len(chemical_list)):
# 匹配标题并替换
chemical_list[i] = re.sub(r'\n[1-9]{1,3}.', '', chemical_list[i], count=0, flags=0)
return chemical_list
except Exception as e:
logger.error(e)
logger.error('gpt指令拆分失败,请查看原因')
return []
# 获取模型列表
def get_module_list():
header = {
'Authorization': 'Bearer ' + api_key,
}
x = requests.get('https://api.openai.com/v1/models', headers=header)
print(x.text)
def split_prompt(response):
logger.info(response)
def get_gpt_message(task): def get_gpt_message(task):
openai.organization = organization openai.organization = organization
...@@ -28,29 +72,28 @@ def get_gpt_message(task): ...@@ -28,29 +72,28 @@ def get_gpt_message(task):
logger.info('开始访问open_ai') logger.info('开始访问open_ai')
try: try:
response = openai.Completion.create( response = openai.Completion.create(
model="text-davinci-003", model="text-davinci-003",
prompt="请根据我给你的指令生成"+str(prompt_num)+"条相似的指令,指令如下:"+prompt, prompt="请根据我给你的指令生成" + str(prompt_num) + "条相似的指令,指令如下:" + prompt,
temperature=1, temperature=1,
max_tokens=500, max_tokens=1000,
top_p=1, top_p=1,
frequency_penalty=0.0, frequency_penalty=0.0,
presence_penalty=0.0, presence_penalty=0.0,
stop=None stop=None
) )
logger.info(response) # 拆分指令
res_prompt = split_prompt(response, task)
# 回调
gpt_callback(res_prompt, task)
logger.info('open_ai_结束')
except Exception as e: except Exception as e:
logger.info(f"错误 {e}") logger.info(f"错误 {e}")
# 拆分指令
res_prompt = split_prompt(response, task)
# 回调
gpt_callback(res_prompt, task)
logger.info('open_ai_结束')
if __name__ == '__main__': if __name__ == '__main__':
key = 'laravel_database_gpt_text_prompt' key = 'laravel_database_gpt_text_prompt'
logger.info('开始执行') logger.info('开始执行')
while True: while False:
tasks = list() tasks = list()
# 获取任务数量 # 获取任务数量
task_num = RedisCon.get_task_num(key) task_num = RedisCon.get_task_num(key)
...@@ -72,19 +115,11 @@ if __name__ == '__main__': ...@@ -72,19 +115,11 @@ if __name__ == '__main__':
tasks.append(get_gpt_message(task)) tasks.append(get_gpt_message(task))
loop.run_until_complete((asyncio.wait(tasks, timeout=30))) loop.run_until_complete((asyncio.wait(tasks, timeout=30)))
else: else:
time.sleep(3) logger.info('等待100秒')
time.sleep(100)
continue continue
# test_task = { test_task = {'type': 2,
# 'type': 2, 'prompt': 'a very cute boys, 16 years old, fly a kite,in beautifulstreet,full body,3d art, c4d, octane render, ray tracting,clay material,popmart blind box,Pixar trend, animationlighting, depth of field, ultra detailed',
# 'prompt': 'a very cute boys, 16 years old, fly a kite,in beautifulstreet,full body,3d art, c4d, octane render, ray tracting,clay material,popmart blind box,Pixar trend, animationlighting, depth of field, ultra detailed --q 5', 'prompt_img': None, 'user_id': 1, 'prompt_num': 5,
# 'prompt_img': '', 'callback': 'http://test.phpgpt.com/api/users/gpt/callback', 'task_id': 1}
# 'user_id': 1, get_gpt_message(test_task)
# 'prompt_num': 5,
# 'task_id': 10,
# 'callback': 'http://test.phpgpt.com/api/users/gpt/callback'
# }
# get_gpt_message(test_task)
import time
import re
# 获取当前时间
# print(int(time.mktime(time.localtime(time.time()))))
text = '\u6761\u76f8\u4f3c\u7684\u6307\u4ee4\u53ef\u80fd\u662f\uff1a\n\n1.A attractive girls, 12 years old, dancing with a rainbow umbrella, in a wide street, full body, V-Ray render, Octane render, X-Particles, cartoon material, Popmart keychains, CG trend, night lighting, long-focus, ultra high definition. \n2.A very handsome teenagers, 10 years old, riding a skateboard, in a colorful playground, 3/4 body, Arnold render, Corona render, hard surface modeling, photorealistic material, Popmart toys, Pixar tech, interior lighting, soft focus, ultra realistic. \n3.A very lovely kids, 5 years old, playing a guitar, in an old alley, full body, Blender render, Redshift render, polygon modeling, 3d printed material, Popmart collectibles, anime trend, day lighting, depth of field, ultra stunning. \n4.A cute baby, 2 years old, flying a kite, in a green park, upper body, Maxwell render, Arnold render, sculpting, traditional material, Popmart accessories, motion graphics trend, art direction lighting, bokeh, ultra hyper real. \n5.A really cute teens, 14 years old, drawing a picture, in a quiet garden, full body, Octane render, Art Renderer, low polygon modeling, abstract material, Popmart dolls, Hollywood trend, environment lighting, vignette, ultra vibrant.'
# 拆分
# 使用正则定义分隔符
pattern = r'\n[1-9]{1,2}.*.'
# 拆分字符串
chemical_list = re.findall(pattern, text)
for item in chemical_list:
# 匹配标题并替换
item = re.sub(r'\n[1-9]{1,3}.', '', item, count=0, flags=0)
print(item)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment