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()
相关推荐
cao23335 小时前
关于 y0 y1 yn 变量名冲突说法的指正
笔记
进击的明明7 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
全栈弄潮儿8 小时前
Python实战第8期:函数
后端·python·编程语言
卷无止境10 小时前
暗流与破局:AI时代的代码安全审查工具全景指南
后端·python
卷无止境12 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
众壹新能源科技14 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
~patience~14 小时前
WAV 逆向分析工具使用笔记
笔记
滴啦嘟啦哒14 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
xier_ran14 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名14 小时前
ai应用开发的学习笔记
服务器·笔记·学习