Implement login module for user authentication in BIP system
This commit is contained in:
65
login.py
Normal file
65
login.py
Normal 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
28
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()
|
||||||
|
|||||||
31
record.py
31
record.py
@@ -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() # 假设是某个新建按钮
|
||||||
|
|||||||
Reference in New Issue
Block a user