Commit 0d4d5cb6 by lei

1

parent 849e6738
# 默认忽略的文件
/shelf/
/workspace.xml
Img_Ai
\ No newline at end of file
......@@ -2,7 +2,11 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.8" jdkType="Python SDK" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">
<option name="format" value="PLAIN" />
<option name="myDocStringFormat" value="Plain" />
</component>
</module>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N806" />
</list>
</option>
</inspection_tool>
</profile>
</component>
\ No newline at end of file
......@@ -2,7 +2,7 @@
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/python-demo.iml" filepath="$PROJECT_DIR$/.idea/python-demo.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/Img_Ai.iml" filepath="$PROJECT_DIR$/.idea/Img_Ai.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="NewModuleRootManager">
<orderEntry type="jdk" jdkName="Python 3.8" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
import json
import os
import shutil
import stat
from loguru import logger
import requests
class VmLogin:
def __init__(self, token):
self.token = token
def get_remotely_url(self, path):
"""
vmlogin 远程地址
:param path:
:return:
"""
return f"https://api.vmlogin.com/v1{path}"
def get_chrome_config(self, profile_id, start_url='', proxy=None):
"""
获取修改后的浏览器配置
:param profile_id: 配置ID
:param start_url: 打开地址
:return:ilo29@
"""
url = self.get_remotely_url(f'/profile/detail?token={self.token}&profileId={profile_id}')
json_text = self.request_get(url)
print(json.dumps(json_text))
json_text['proxyServer']['setProxyServer'] = True
json_text['startUrl'] = start_url
json_text['proxyServer']['port'] = proxy['port']
json_text['proxyServer']['host'] = proxy['host']
json_text['proxyServer']['username'] = proxy.get('username', '')
json_text['proxyServer']['password'] = proxy.get('password', '')
return json_text
def create_chrome_config(self, body, user_agent, name="关键词上首页"):
"""
创建浏览器配置
:param body:
:param user_agent:
:return:
"""
body['name'] = name
body['userAgent'] = user_agent
body['localCache']['deleteCache'] = True
body['localCache']['deleteCookie'] = True
body['localCache']['clearCache'] = True
body['localCache']['clearHistory'] = True
headers = {'Content-Type': 'application/json'}
url = self.get_remotely_url('/profile/create')
text = requests.post(url, headers=headers,
data=json.dumps({"token": self.token, "Body": body})).json()
return text['value']
def get_local_url(self, path):
"""
vmlogin 本地地址
:param path:
:return:
"""
return f"http://127.0.0.1:35000/api/v1{path}"
def start_chrome(self, profile_id):
"""
启动浏览器
:param profile_id: 配置ID
:return:
"""
url = self.get_local_url(f'/profile/start?profileId={profile_id}')
text = requests.get(url).json()
if text['status'] == 'ERROR':
return ''
return ('' + text['value']).replace("http://127.0.0.1:", "")
def request_get(self, url, params=None):
"""
发送请求
:param url: 请求地址
:param params: 请求参数
:return: 配置信息
"""
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62"
}
return requests.get(url, headers=headers, params=params).json()
def get_rand_ua(self):
"""
获取随机请求头
:return:
"""
url = self.get_local_url(f'/profile/randomProfile?token={self.token}&platform=Windows&browser=chrome')
json_text = self.request_get(url)
return json_text['userAgent']
def stop_chrome(self, profile_id):
"""
停止浏览器
:param profile_id:
:return:
"""
url = self.get_local_url(f'/profile/stop?profileId={profile_id}')
self.request_get(url)
def delete_config(self, profile_id, path="C:\\Users\\Administrator\\AppData\\Roaming\\VMLogin\\profile"):
"""
删除配置文件
:param profile_id: 配置ID
:return:
"""
url = self.get_remotely_url(f'/profile/remove?token={self.token}&profileId={profile_id}')
requests.get(url)
self.delete_file(path)
def delete_file(self, file_path):
"""
删除文件
:param file_path: 文件地址
:return:
"""
if os.path.exists(file_path):
for fileList in os.walk(file_path):
for name in fileList[2]:
os.chmod(os.path.join(fileList[0], name), stat.S_IWRITE)
os.remove(os.path.join(fileList[0], name))
shutil.rmtree(file_path)
return "delete ok"
else:
return "no filepath"
def import_cookie(self, profile_id: str, cookie: dict) -> dict:
"""
导入cookie
:param profile_id:
:param cookie:
:return:
"""
url = self.get_local_url('/profile/cookies/import/webext')
data = {
'profileId': profile_id,
'body': cookie,
}
return requests.post(url=url, data=data).json()
if __name__ == '__main__':
token = '6731ae7034426c1f861479eaeb964c61'
data = VmLogin(token).get_chrome_config('0B3D6BAF-E534-4CE5-A53B-75D405378E39')
print(data)
This diff is collapsed. Click to expand it.
......@@ -16,13 +16,13 @@ def createOrUpdateBrowser(browser_item): # 创建或者更新窗口
# 9 db474b6936a24a7a949377a6d90b4dcb
'id': browser_item['id'], # 有值时为修改,无值是添加
# 'groupId': '2c996b378054663b01805a69f0344410', # 群组ID,绑定群组时传入,如果登录的是子账号,则必须赋值,否则会自动分配到主账户下面去
'platform': 'https://discord.com', # 账号平台
'platformIcon': 'discord', # 取账号平台的 hostname 或者设置为other
'url': '', # 打开的url,多个用,分开
# 'platform': 'https://discord.com', # 账号平台
# 'platformIcon': 'discord', # 取账号平台的 hostname 或者设置为other
# 'url': '', # 打开的url,多个用,分开
'name': 'Discord', # 窗口名称
'remark': '登录discord', # 备注
'userName': '', # 用户账号
'password': '', # 用户密码
# 'userName': '', # 用户账号
# 'password': '', # 用户密码
'cookie': '', # Cookie,符合标准的序列化字符串,具体可参考文档
# IP库,默认ip-api,选项 ip-api | ip123in | luminati,luminati为Luminati专用
'ipCheckService': 'ip-api',
......
......@@ -146,9 +146,9 @@ class ToWork:
# 选择指令
prompt_el = '//*[@id="autocomplete-0"]'
# 等待选择指令元素出现
element = self.CheckElement(dricer, 'xpath', prompt_el, 5)
element = self.CheckElement(dricer, prompt_el, 5)
if element:
status = self.ElementClick(dricer, 'xpath', prompt_el, '选择指令')
status = self.ElementClick(dricer, prompt_el, '选择指令')
if status:
change_prompt = task['prompt']
# 图片链接
......
import uuid
from multiprocessing import Process, Lock
import asyncio
from loguru import logger
from Helper import RedisCon
import requests
import os
import oss2
class DownLoad:
def __init__(self, lock, task):
self.key = ''
self.lock = lock
self.task = task
self.header = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': ''
}
async def download_img(self, url, cur_uuid):
"""
下载图片
:param url:
:return:
"""
for i in range(3):
try:
get_file = requests.get(url=url, headers=self.header, stream=True, allow_redirects=False, timeout=10)
file_name = cur_uuid
if not os.path.exists('./download'):
os.makedirs('./download')
path = f'./download/{file_name}'
with open(path, "wb") as Pypdf:
for chunk in get_file.iter_content(chunk_size=1024): # 1024 bytes
if chunk:
Pypdf.write(chunk)
return path
except Exception as e:
logger.error(e)
async def upload_ali_oss(self, path, cur_uuid):
access_key_id = os.getenv('key', 'cener')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', 'xxxxxxxxxxxxxxx')
bucket_name = os.getenv('OSS_TEST_BUCKET', 'xxxx-test')
endpoint = os.getenv('OSS_TEST_ENDPOINT', 'oss-cn-shenzhen.aliyuncs.com')
base_file_url = 'xxxxx-test.oss-cn-shenzhen.aliyuncs.com'
bucket_folder = 'test/' # bucket_folder = 'test/'
# 开始
async def on_start(self):
logger.info('开始执行')
cur_uuid = uuid.uuid4()
cur_uuid = str(cur_uuid) + '.png'
# 下载图片
path = await self.download_img(self.task['result_img'], cur_uuid)
if path:
logger.info('图片下载成功')
# 图片下载成功--准备上传阿里云
await self.upload_ali_oss(path, cur_uuid)
else:
# 图片下载失败-直接回调-失败状态
print('111')
def process_start(lock, task):
loop = asyncio.get_event_loop()
keyword = DownLoad(lock, task)
# 生产
loop.run_until_complete(keyword.on_start())
if __name__ == '__main__':
# 获取任务并实例化
key = 'laravel_database_discord_img_download'
try:
tasks = list()
task_num = RedisCon.get_task_num(key)
logger.info(f'{task_num}个任务')
nums = 10
process = 0
if task_num and task_num > 0:
if task_num < nums:
process = task_num
else:
process = nums
lock = Lock()
l = []
for i in range(process):
task = RedisCon.get_task(key)
p = Process(target=process_start, args=(lock, task))
p.start()
l.append(p) # 将进程加入列表中,这样 5 个子进程就会全部执行
for p in l:
p.join() # 当5 个子进程全部执行完,才会执行主进程
except Exception as e:
logger.error(e)
......@@ -93,7 +93,7 @@ def get_gpt_message(task):
if __name__ == '__main__':
key = 'laravel_database_gpt_text_prompt'
logger.info('开始执行')
while False:
while True:
tasks = list()
# 获取任务数量
task_num = RedisCon.get_task_num(key)
......@@ -115,11 +115,11 @@ if __name__ == '__main__':
tasks.append(get_gpt_message(task))
loop.run_until_complete((asyncio.wait(tasks, timeout=30)))
else:
logger.info('等待100秒')
time.sleep(100)
logger.info('等待3秒')
time.sleep(3)
continue
test_task = {'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_img': None, 'user_id': 1, 'prompt_num': 5,
'callback': 'http://test.phpgpt.com/api/users/gpt/callback', 'task_id': 1}
get_gpt_message(test_task)
# test_task = {'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_img': None, 'user_id': 1, 'prompt_num': 5,
# 'callback': 'http://test.phpgpt.com/api/users/gpt/callback', 'task_id': 1}
# get_gpt_message(test_task)
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