AIStudioBuildWS / browser /navigation.py
hkfires's picture
Upload 10 files
3085164 verified
raw
history blame
2.38 kB
import time
import os
from playwright.sync_api import Page, expect
from utils.paths import logs_dir
from utils.common import ensure_dir
def handle_untrusted_dialog(page: Page, logger=None):
"""
检查并处理 "Last modified by..." 的弹窗。
如果弹窗出现,则点击 "OK" 按钮。
"""
ok_button_locator = page.get_by_role("button", name="OK")
try:
if ok_button_locator.is_visible(timeout=10000): # 等待最多10秒
logger.info(f"检测到弹窗,正在点击 'OK' 按钮...")
ok_button_locator.click(force=True)
logger.info(f"'OK' 按钮已点击。")
expect(ok_button_locator).to_be_hidden(timeout=1000)
logger.info(f"弹窗已确认关闭。")
else:
logger.info(f"在10秒内未检测到弹窗,继续执行...")
except Exception as e:
logger.info(f"检查弹窗时发生意外:{e},将继续执行...")
def handle_successful_navigation(page: Page, logger, cookie_file_config):
"""
在成功导航到目标页面后,执行后续操作(处理弹窗、保持运行)。
"""
logger.info("已成功到达目标页面。")
page.click('body') # 给予页面焦点
# 检查并处理 "Last modified by..." 的弹窗
handle_untrusted_dialog(page, logger=logger)
# 等待页面加载和渲染
logger.info("等待15秒以便页面完全渲染...")
time.sleep(15)
logger.info("实例将保持运行状态。每10秒点击一次页面以保持活动。")
while True:
try:
page.click('body')
time.sleep(10)
except Exception as e:
logger.error(f"在保持活动循环中出错: {e}")
# 在保持活动循环中出错时截屏
try:
screenshot_dir = logs_dir()
ensure_dir(screenshot_dir)
screenshot_filename = os.path.join(screenshot_dir, f"FAIL_keep_alive_error_{cookie_file_config}.png")
page.screenshot(path=screenshot_filename, full_page=True)
logger.info(f"已在保持活动循环出错时截屏: {screenshot_filename}")
except Exception as screenshot_e:
logger.error(f"在保持活动循环出错时截屏失败: {screenshot_e}")
break # 如果页面关闭或出错,则退出循环