You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python编写的Web应用自动化脚本适配4种用户角色运行?

适配多用户角色的Web自动化脚本实现方案

作为Python新手,你可以通过拆分角色逻辑、配置映射、动态选择执行这几个核心步骤来实现多角色适配,下面是具体的落地方法:

1. 拆分通用与角色专属逻辑

先把脚本里的通用操作(比如登录、打开/关闭浏览器)抽成基础类,再为每个角色单独编写专属任务的子类,既复用代码,又能清晰区分不同角色的操作。

示例代码:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

# 基础自动化类:封装所有角色通用的操作
class BaseAutomation:
    def __init__(self, driver):
        self.driver = driver
        self.base_url = "https://你的Web应用地址.com"

    def open_app(self):
        self.driver.get(self.base_url)

    def login(self, username, password):
        # 通用登录流程,根据你的Web页面元素调整
        self.driver.find_element("id", "username-input").send_keys(username)
        self.driver.find_element("id", "password-input").send_keys(password)
        self.driver.find_element("id", "login-submit").click()

    def close_app(self):
        self.driver.quit()

# 角色A专属操作类:提交采购申请
class RoleA(BaseAutomation):
    def run_task(self):
        try:
            self.driver.find_element("id", "purchase-apply-btn").click()
            self.driver.find_element("id", "product-name").send_keys("办公电脑")
            self.driver.find_element("id", "submit-apply").click()
            print("角色A任务执行完成")
        except NoSuchElementException as e:
            print(f"角色A任务出错:找不到元素 {e}")

# 角色B专属操作类:审核采购申请
class RoleB(BaseAutomation):
    def run_task(self):
        try:
            self.driver.find_element("id", "audit-list").click()
            self.driver.find_element("id", "approve-first-item").click()
            print("角色B任务执行完成")
        except NoSuchElementException as e:
            print(f"角色B任务出错:找不到元素 {e}")

# 角色C专属操作类:查看采购报表
class RoleC(BaseAutomation):
    def run_task(self):
        try:
            self.driver.find_element("id", "report-menu").click()
            self.driver.find_element("id", "export-report").click()
            print("角色C任务执行完成")
        except NoSuchElementException as e:
            print(f"角色C任务出错:找不到元素 {e}")

# 角色D专属操作类:修改系统配置
class RoleD(BaseAutomation):
    def run_task(self):
        try:
            self.driver.find_element("id", "settings-menu").click()
            self.driver.find_element("id", "update-timeout").send_keys("30")
            self.driver.find_element("id", "save-settings").click()
            print("角色D任务执行完成")
        except NoSuchElementException as e:
            print(f"角色D任务出错:找不到元素 {e}")

2. 配置角色信息映射

用字典把角色名称、账号密码、对应的操作类关联起来,避免硬编码,后续修改角色信息更方便。

示例:

# 角色配置字典:key是角色标识,value是(用户名, 密码, 对应操作类)
ROLE_SETTINGS = {
    "role_a": ("user_a", "pass_a123", RoleA),
    "role_b": ("user_b", "pass_b456", RoleB),
    "role_c": ("user_c", "pass_c789", RoleC),
    "role_d": ("user_d", "pass_d012", RoleD)
}

3. 添加角色选择与执行入口

给脚本加一个入口,支持命令行传参或交互式选择两种方式:

方式1:命令行传参启动

适合批量执行或脚本集成场景:

import sys

def main():
    # 检查命令行参数
    if len(sys.argv) != 2:
        print("使用方法:python your_script.py <角色名称>")
        print("可选角色:role_a, role_b, role_c, role_d")
        sys.exit(1)

    selected_role = sys.argv[1]
    if selected_role not in ROLE_SETTINGS:
        print(f"无效角色,请选择:{', '.join(ROLE_SETTINGS.keys())}")
        sys.exit(1)

    # 初始化浏览器驱动(这里用Chrome,可替换为Firefox等)
    driver = webdriver.Chrome()
    # 获取角色配置
    username, password, RoleClass = ROLE_SETTINGS[selected_role]
    # 实例化角色操作对象
    automation = RoleClass(driver)

    # 执行完整流程
    automation.open_app()
    automation.login(username, password)
    automation.run_task()
    automation.close_app()

if __name__ == "__main__":
    main()

方式2:交互式选择启动

适合手动运行脚本的场景:

def main():
    print("=== 选择要执行的用户角色 ===")
    # 列出所有角色选项
    for idx, role_name in enumerate(ROLE_SETTINGS.keys(), 1):
        print(f"{idx}. {role_name}")

    # 获取用户选择
    try:
        choice = int(input("请输入对应编号:"))
        role_name = list(ROLE_SETTINGS.keys())[choice - 1]
    except (ValueError, IndexError):
        print("输入无效,请重新运行脚本选择正确编号")
        return

    # 后续执行逻辑和命令行方式一致
    driver = webdriver.Chrome()
    username, password, RoleClass = ROLE_SETTINGS[role_name]
    automation = RoleClass(driver)

    automation.open_app()
    automation.login(username, password)
    automation.run_task()
    automation.close_app()

if __name__ == "__main__":
    main()

4. 可选优化:添加超时等待与容错

如果想让脚本更健壮,可以用WebDriverWait添加元素加载超时等待,避免页面加载慢导致的报错:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class RoleA(BaseAutomation):
    def run_task(self):
        try:
            # 等待按钮加载完成再点击,超时10秒
            apply_btn = WebDriverWait(self.driver, 10).until(
                EC.presence_of_element_located(("id", "purchase-apply-btn"))
            )
            apply_btn.click()
            # 其他操作...
            print("角色A任务执行完成")
        except Exception as e:
            print(f"角色A任务出错:{str(e)}")

内容的提问来源于stack exchange,提问作者Ranit Mondal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:35:18