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()
相关推荐
lisw051 小时前
用于医疗的磁驱动柔性微机器人研究进展!
机器人·自动化·硬件工程
青少儿编程课堂1 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
无咎.lsy3 小时前
《机器学习》笔记
笔记·机器学习
灿飞屋3 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
坤坤子吖4 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢5 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
蒸蒸yyyyzwd5 小时前
后端相关学习笔记。
笔记·学习
一条大祥脚6 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机6 小时前
Milvus 8种检索能力实践
数据库·python·agent
旖旎夜光6 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习