playwright浏览器自动化实战笔记3-登陆以及退出登陆流程-多用户操作

等待操作

playwright自带自动等待机制,你不需要显式写等待代码,Playwright 会在执行动作(如点击、输入)前自动等待元素处于可操作状态。

python 复制代码
#方法一:
locator = page.locator("#submitId")
locator.wait_for(state="visible",timeout=10000)#默认30s,可手动单独设置如10s
#方法二:
page.wait_for_selector("#result", state="visible")
#方法三
# 等待 DOM 树构建完成(最常用,性能好)
page.wait_for_load_state("domcontentloaded")
# 等待所有资源(图片、CSS、JS)加载完毕
page.wait_for_load_state("load")
# 等待网络空闲(500ms无请求)。如果有轮询接口,会卡到超时!
page.wait_for_load_state("networkidle")
#等待跳转到相应的url
page.wait_for_url("**/ownerNotice")#这块不需要写全url,使用通配符**/ownerNotice
#强制等待类似time.sleep(3)
page.wait_for_timeout(3000)

代码实现:

python 复制代码
import time
from playwright.sync_api import sync_playwright

with sync_playwright() as p:

    browser=p.chromium.launch(headless=False)
    page=browser.new_page(viewport={"width": 1920, "height": 1080})
    page.goto("https://yxf.cc.com/admin-tenant/#/login")
    time.sleep(3)
    page.get_by_placeholder("请输入企业号").fill("ydhl")
    page.get_by_placeholder("请输入用户名").fill("ydhl")
    page.get_by_placeholder("请输入密码").fill("Ydhl123456")
    page.get_by_role("button", name="登录").click()
    page.wait_for_url("**/index")  # 不适用全url,方便代码编写,方便代码移植
    print("登录成功,当前页面:", page.url)
    page.get_by_text("甘飞梅原点演示").hover()#鼠标悬浮
    logout_btn = page.get_by_text("退出登录")  #退出登陆元素定位
    logout_btn.wait_for(state="visible") #等待他可见状态
    # 点击退出
    logout_btn.click()
    print("退出成功,登陆页面",page.url)
    browser.close()

测试结果:

多用户操作

可实现多个用户操作,两个用户同时操作;

python 复制代码
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)

    # 创建两个独立的上下文(模拟两个独立用户)
    context_userA = browser.new_context()
    context_userB = browser.new_context()

    page_userA = context_userA.new_page()
    page_userB = context_userB.new_page()
    # 两个页面的登录状态互不影响
    page_userA.goto("https://cc/login")
    page_userB.goto("https://cc/login")

    # 用户A登录
    page_userA.get_by_placeholder("请输入登录账号").fill("13426251955")
    page_userA.get_by_placeholder("密码").fill("13426251955")
    page_userA.locator("//button[@type='submit']").click()
    #用户B登录
    page_userB.get_by_placeholder("请输入登录账号").fill("13426251956")
    page_userB.get_by_placeholder("密码").fill("13426251956")
    page_userB.locator("//button[@type='submit']").click()

    context_userB.close()
    context_userA.close()
    browser.close()
相关推荐
李游Leo3 小时前
HarmonyOS 7 + ArkUI + RelationalStore 学习笔记:本地数据分层存储与状态持久化架构实践【鸿蒙心迹】
笔记·学习·架构·harmonyos
我命由我123453 小时前
经纪人的职业定义
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
摇滚侠4 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python
知产xiao_xin4 小时前
地理标志权
经验分享·笔记·知识产权
小小小小钰儿5 小时前
1.5-Python网络编程
开发语言·网络·python·web安全·计算机·网络安全
keke.shengfengpolang5 小时前
2026年金融风控岗技术能力拆解:SQL取数、Python建模、评分卡项目,校招面试到底考什
python
kyrie_sakura5 小时前
大模型学习7 -- 深度学习2 -- 张量
python·深度学习
智鸟科技GemeOpen开发者智能设备6 小时前
智能插座二次开发如何接入Home Assistant,从零开始完整工程实现(Python+React)
开发语言·python·物联网·react.js·智能家居
hqyjzsb6 小时前
法律 Prompt 干货:搭建合同审查提示词要包含哪些要素
开发语言·人工智能·python·职场和发展·数据分析·prompt·业界资讯