From 632940cfedefc92cae35ba5ae4331dae6a6ca297 Mon Sep 17 00:00:00 2001 From: Misaka_Company Date: Thu, 15 Jan 2026 10:47:27 +0800 Subject: [PATCH] Implement login module for user authentication in BIP system --- login.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.py | 28 ++++++++++++++++++++++++ record.py | 31 ++++++++------------------ 3 files changed, 102 insertions(+), 22 deletions(-) create mode 100644 login.py diff --git a/login.py b/login.py new file mode 100644 index 0000000..aba8933 --- /dev/null +++ b/login.py @@ -0,0 +1,65 @@ +""" +登录模块 - 负责用友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 diff --git a/main.py b/main.py index e69de29..ba7da4f 100644 --- a/main.py +++ b/main.py @@ -0,0 +1,28 @@ +""" +主程序 - 演示如何使用登录模块 +""" +from playwright.sync_api import sync_playwright +from login import login + +def main(): + with sync_playwright() as playwright: + # 调用登录模块 + browser, context, page, main_frame = login( + playwright=playwright, + username="BLDpengqiangqiang", + password="Cqbld123456.", + headless=False, + ignore_https_errors=True + ) + + # 登录成功后可以进行后续操作 + print("登录成功,可以进行后续操作...") + + input("按回车退出...") + + # 关闭浏览器 + context.close() + browser.close() + +if __name__ == "__main__": + main() diff --git a/record.py b/record.py index 1d8a9e7..4c2be77 100644 --- a/record.py +++ b/record.py @@ -1,7 +1,7 @@ import re import time from playwright.sync_api import Playwright, sync_playwright, expect, TimeoutError as PWTimeoutError -import time +from login import login def click_button_until_disappear(frame, button_name="保存提交", interval=5, max_attempts=None, max_duration=None): """ @@ -115,27 +115,14 @@ def get_input_by_label(frame, label_text: str, label_locator=None): return None def run(playwright: Playwright) -> None: - browser = playwright.chromium.launch(headless=False) - context = browser.new_context(ignore_https_errors=True) - page = context.new_page() - - # 1. 登录主页面 - page.goto("https://68.11.34.30:8082/yonbip/resources/uap/rbac/login/main/index.html") - - # 提取主 iframe - main_frame = page.locator("#forwardFrame").content_frame - - main_frame.get_by_role("textbox", name="用户名").fill("BLDpengqiangqiang") - main_frame.get_by_role("textbox", name="密码").fill("Cqbld123456.") - main_frame.get_by_role("button", name="登录").click() - - # 2. 处理强制登录弹窗(判断是否存在) - confirm_btn = main_frame.get_by_role("button", name="确定") - if confirm_btn.count() > 0: - confirm_btn.click() - print("强制登录") - else: - print("正常登录") + # 1. 登录 + browser, context, page, main_frame = login( + playwright=playwright, + username="BLDpengqiangqiang", + password="Cqbld123456.", + headless=False, + ignore_https_errors=True + ) # 3. 点击打开“补货安排” main_frame.locator("i").first.click() # 假设是某个新建按钮