修复发视频后无法获取到链接和截图失败的问题

This commit is contained in:
Your Name
2025-08-20 22:35:30 +08:00
parent 200eef7dcd
commit 8664cd77e7

View File

@@ -6,18 +6,18 @@ import sys
import threading
import time
import uuid
from datetime import datetime
import pyotp
import pywintypes
import requests
from fake_useragent import UserAgent # 导入 UserAgent
import win32api
import win32con
from PIL import ImageGrab
from fake_useragent import UserAgent # 导入 UserAgent
from loguru import logger
from playwright._impl._page import Page
from playwright.sync_api import sync_playwright, Error, TimeoutError
from concurrent.futures import ThreadPoolExecutor
from const import BUCKET, BASE_PATH
from exceptions import AuthException, OperationFailed
@@ -231,6 +231,55 @@ def playwright_like(cookies, target_url):
}
# 获取个个人主页视频数量
def get_video_count(page, cookies):
# 进入个人主页视频页面获取最新视频链接
cookies = {i['name']: i['value'] for i in parse_cookies(cookies)}
uid = cookies['c_user']
videos_url = f"https://www.facebook.com/profile.php?id={uid}&sk=videos" # 替换为实际的个人主页URL
retry_goto(page, videos_url)
videos = page.query_selector_all('//img[@alt="View photo"]')
return len(videos)
def retry_get_new_video(page, cookies, video_count):
"""
每分钟重试一次5分钟内没获取到新视频则抛出Timeout异常
Args:
page: Playwright页面对象
cookies: Cookies
video_count: 初始视频数量
Returns:
函数执行结果或抛出Timeout如果超时
"""
max_duration = 5 * 60 # 5分钟
start_time = time.time()
attempt = 1
while time.time() - start_time < max_duration:
# 获取当前视频数量
new_videO_count = get_video_count(page, cookies)
# 如果新视频数量大于初始视频数量,则表示有新视频上传
if new_videO_count > video_count:
page.query_selector_all('//img[@alt="View photo"]')[0].click()
page.reload()
return page.url
# 计算下一次重试时间
elapsed = time.time() - start_time
if elapsed < max_duration:
sleep_time = 60 - (elapsed % 60) # 确保每分钟执行一次
print(f"等待 {sleep_time:.1f} 秒后重试...")
time.sleep(sleep_time)
attempt += 1
print("5分钟超时退出重试")
raise TimeoutError("未获取到新视频(可能视频上传失败)已超时5分钟")
def playwright_post(cookies, content, image_key=None):
path = os.path.join(BASE_PATH, 'chrome', '130-0008', 'chrome.exe')
with lock:
@@ -244,9 +293,15 @@ def playwright_post(cookies, content, image_key=None):
page = context.new_page()
check_account_status(page, parse_cookies(cookies))
# 声明默认发布视频数量
video_count = 0
url = 'https://facebook.com'
try:
# 先获取视频数量
if ".mp4" in image_key:
video_count = get_video_count(page, cookies)
retry_goto(page, url)
time.sleep(random.randint(3, 10))
time.sleep(5)
@@ -272,6 +327,9 @@ def playwright_post(cookies, content, image_key=None):
time.sleep(5)
page.reload()
post_url = page.url
# 视频格式要单独去获取链接
if ".mp4" in image_key:
post_url = retry_get_new_video(page, cookies, video_count)
except Error as e:
raise OperationFailed(f'操作超时,请重试{e}')