1. 抖音我这边遇到必须上传封面的情况,自动设置第一个推荐封面(大概率首帧)

This commit is contained in:
home-dev-pookz
2025-12-09 15:01:04 +08:00
parent 35c015ea06
commit ab2dbb0de6
2 changed files with 40 additions and 2 deletions
+1 -1
View File
@@ -3,4 +3,4 @@ from pathlib import Path
BASE_DIR = Path(__file__).parent.resolve() BASE_DIR = Path(__file__).parent.resolve()
XHS_SERVER = "http://127.0.0.1:11901" XHS_SERVER = "http://127.0.0.1:11901"
LOCAL_CHROME_PATH = "" # change me necessary! for example C:/Program Files/Google/Chrome/Application/chrome.exe LOCAL_CHROME_PATH = "" # change me necessary! for example C:/Program Files/Google/Chrome/Application/chrome.exe
LOCAL_CHROME_HEADLESS = True LOCAL_CHROME_HEADLESS = False
+39 -1
View File
@@ -213,6 +213,8 @@ class DouYinVideo(object):
douyin_logger.success(" [-]视频发布成功") douyin_logger.success(" [-]视频发布成功")
break break
except: except:
# 尝试处理封面问题
await self.handle_auto_video_cover(page)
douyin_logger.info(" [-] 视频正在发布中...") douyin_logger.info(" [-] 视频正在发布中...")
await page.screenshot(full_page=True) await page.screenshot(full_page=True)
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
@@ -223,7 +225,43 @@ class DouYinVideo(object):
# 关闭浏览器上下文和浏览器实例 # 关闭浏览器上下文和浏览器实例
await context.close() await context.close()
await browser.close() await browser.close()
async def handle_auto_video_cover(self, page):
"""
处理必须设置封面的情况,点击推荐封面的第一个
"""
# 1. 判断是否出现 "请设置封面后再发布" 的提示
# 必须确保提示是可见的 (is_visible),因为 DOM 中可能存在隐藏的历史提示
if await page.get_by_text("请设置封面后再发布").first.is_visible():
print(" [-] 检测到需要设置封面提示...")
# 2. 定位“智能推荐封面”区域下的第一个封面
# 使用 class^= 前缀匹配,避免 hash 变化导致失效
recommend_cover = page.locator('[class^="recommendCover-"]').first
if await recommend_cover.count():
print(" [-] 正在选择第一个推荐封面...")
try:
await recommend_cover.click()
await asyncio.sleep(1) # 等待选中生效
# 3. 处理可能的确认弹窗 "是否确认应用此封面?"
# 并不一定每次都会出现,健壮性判断:如果出现弹窗,则点击确定
confirm_text = "是否确认应用此封面?"
if await page.get_by_text(confirm_text).first.is_visible():
print(f" [-] 检测到确认弹窗: {confirm_text}")
# 直接点击“确定”按钮,不依赖脆弱的 CSS 类名
await page.get_by_role("button", name="确定").click()
print(" [-] 已点击确认应用封面")
await asyncio.sleep(1)
print(" [-] 已完成封面选择流程")
return True
except Exception as e:
print(f" [-] 选择封面失败: {e}")
return False
async def set_thumbnail(self, page: Page, thumbnail_path: str): async def set_thumbnail(self, page: Page, thumbnail_path: str):
if thumbnail_path: if thumbnail_path:
douyin_logger.info(' [-] 正在设置视频封面...') douyin_logger.info(' [-] 正在设置视频封面...')