""" 登录模块 - 负责用友BIP系统的登录操作 """ from playwright.sync_api import Playwright, Browser, BrowserContext, Page, Frame def login( playwright: Playwright, username: str, password: str, url: str = "https://68.11.34.30:8082/yonbip/resources/uap/rbac/login/main/index.html", headless: bool = False, ignore_https_errors: bool = True ) -> tuple[Browser, BrowserContext, Page, Frame]: """ 登录用友BIP系统 参数: playwright: Playwright实例 username: 用户名 password: 密码 url: 登录页面URL headless: 是否使用无头模式 ignore_https_errors: 是否忽略HTTPS错误 返回: tuple: (browser, context, page, main_frame) - browser: 浏览器实例 - context: 浏览器上下文 - page: 页面对象 - main_frame: 登录后的主iframe (forwardFrame) """ # 启动浏览器 browser = playwright.chromium.launch(headless=headless) # 创建上下文 context = browser.new_context(ignore_https_errors=ignore_https_errors) # 创建页面 page = context.new_page() # 导航到登录页面 page.goto(url) # 提取主 iframe (forwardFrame) main_frame = page.locator("#forwardFrame").content_frame # 填写用户名 main_frame.get_by_role("textbox", name="用户名").fill(username) # 填写密码 main_frame.get_by_role("textbox", name="密码").fill(password) # 点击登录按钮 main_frame.get_by_role("button", name="登录").click() # 处理强制登录弹窗(判断是否存在) confirm_btn = main_frame.get_by_role("button", name="确定") if confirm_btn.count() > 0: confirm_btn.click() print("强制登录") else: print("正常登录") return browser, context, page, main_frame