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()
相关推荐
疯狂打码的少年1 小时前
【计算机网络】OSI/RM七层模型(层次结构、各层功能速览)
开发语言·笔记·计算机网络·php
卷无止境1 小时前
测试全绿,功能能跑,代码却烂到没法上线:AI编程助手留下的十个坑
后端·python
卷无止境1 小时前
终端里的AI战争,命令行编程代理全景扫描
python·agent
SamChan901 小时前
PDF多语言翻译的格式还原技术拆解:从版面分析到内容重排的工程实现
python·ai·pdf·机器翻译
神明不懂浪漫2 小时前
【第四章】索引——B+树、回表,加快数据库的查找能力的利器
开发语言·数据结构·数据库·经验分享·笔记·b树
liuze4082 小时前
安装boss-zhipin-mcp(招聘)
开发语言·python
TickDB2 小时前
Python 接入 A 股盘前集合竞价数据:AkShare 报错到 TickDB 实测的完整解法
python·websocket·行情数据 api
2601_962298272 小时前
【自动化测试】基于Selenium + Python的web自动化框架
自动化测试·python·selenium·测试用例·web框架
吴佳浩 Alben2 小时前
构建企业级 DevOps 排错 Agent:从日志告警到自动化修复 PR
大数据·人工智能·语言模型·架构·自动化·ai编程·devops