重写原神今日素材

This commit is contained in:
McElaga 2023-02-09 22:07:08 +08:00
parent 362ef519b7
commit c99292d327

View File

@ -14,7 +14,7 @@ import asyncio
import time
__zx_plugin_name__ = "原神今日素材"
__zx_plugin_name__ = "今日素材"
__plugin_usage__ = """
usage
看看原神今天要刷什么
@ -57,7 +57,7 @@ async def _(event: MessageEvent):
await material.send(
Message(
image(f"{file_name}.png", "genshin/material")
+ "\n※ 每日素材数据来源于 genshin.pub"
+ "\n※ 每日素材数据来源于米游社"
)
)
logger.info(
@ -86,69 +86,20 @@ async def update_image():
if not browser:
logger.warning("获取 browser 失败,请部署至 linux 环境....")
return False
url = "https://genshin.pub/daily"
page = await browser.new_page()
await page.goto(url, wait_until="networkidle", timeout=10000)
await page.set_viewport_size({"width": 2560, "height": 1080})
await page.evaluate(
"""
document.getElementsByClassName('GSTitleBar_gs_titlebar__2IJqy')[0].remove();
e = document.getElementsByClassName('GSContainer_gs_container__2FbUz')[0];
e.setAttribute("style", "height:880px");
"""
)
await page.click("button")
div = await page.query_selector(".GSContainer_content_box__1sIXz")
for i, card in enumerate(
await page.query_selector_all(".GSTraitCotainer_trait_section__1f3bc")
):
index = 0
type_ = "char" if not i else "weapons"
for x in await card.query_selector_all("xpath=child::*"):
await x.screenshot(
path=f"{IMAGE_PATH}/genshin/material/{type_}_{index}.png",
timeout=100000,
)
# 下滑两次
for _ in range(3):
await div.press("PageDown")
index += 1
# 结束后上滑至顶
for _ in range(index * 3):
await div.press("PageUp")
file_list = os.listdir(f"{IMAGE_PATH}/genshin/material")
char_img = [
f"{IMAGE_PATH}/genshin/material/{x}"
for x in file_list
if x.startswith("char")
]
weapons_img = [
f"{IMAGE_PATH}/genshin/material/{x}"
for x in file_list
if x.startswith("weapons")
]
char_img.sort()
weapons_img.sort()
height = await asyncio.get_event_loop().run_in_executor(
None, get_background_height, weapons_img
)
background_img = BuildImage(1200, height + 100, color="#f6f2ee")
current_width = 50
for img_list in [char_img, weapons_img]:
current_height = 20
for img in img_list:
x = BuildImage(0, 0, background=img)
background_img.paste(x, (current_width, current_height))
current_height += x.size[1]
current_width += 600
# url = "https://genshin.pub/daily"
url = "https://bbs.mihoyo.com/ys/obc/channel/map/193"
page = await browser.new_page(viewport={'width': 860, 'height': 3000})
await page.goto(url)
await page.wait_for_timeout(3000)
file_name = str((datetime.now() - timedelta(hours=4)).date())
background_img.save(f"{IMAGE_PATH}/genshin/material/{file_name}.png")
# background_img.save(f"{IMAGE_PATH}/genshin/material/{file_name}.png")
await page.locator('//*[@id="__layout"]/div/div[2]/div[2]/div/div[1]/div[2]/div/div').screenshot(path=f"{IMAGE_PATH}/genshin/material/{file_name}.png")
await page.close()
return True
except Exception as e:
logger.error(f"原神每日素材更新出错... {type(e)}: {e}")
if page:
await page.close()
page.close()
return False