Files
playwrite/login.py

66 lines
1.8 KiB
Python

"""
登录模块 - 负责用友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