Implement login module for user authentication in BIP system

This commit is contained in:
Misaka_Company
2026-01-15 10:47:27 +08:00
parent 4682e37ead
commit 632940cfed
3 changed files with 102 additions and 22 deletions

65
login.py Normal file
View File

@@ -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

28
main.py
View File

@@ -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()

View File

@@ -1,7 +1,7 @@
import re import re
import time import time
from playwright.sync_api import Playwright, sync_playwright, expect, TimeoutError as PWTimeoutError 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): 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 return None
def run(playwright: Playwright) -> None: def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False) # 1. 登录
context = browser.new_context(ignore_https_errors=True) browser, context, page, main_frame = login(
page = context.new_page() playwright=playwright,
username="BLDpengqiangqiang",
# 1. 登录主页面 password="Cqbld123456.",
page.goto("https://68.11.34.30:8082/yonbip/resources/uap/rbac/login/main/index.html") headless=False,
ignore_https_errors=True
# 提取主 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("正常登录")
# 3. 点击打开“补货安排” # 3. 点击打开“补货安排”
main_frame.locator("i").first.click() # 假设是某个新建按钮 main_frame.locator("i").first.click() # 假设是某个新建按钮