Playwright 绕过滑块登录,直接打开页面录制自动化脚本(亲测有效)

在做自动化测试时,最头疼的莫过于登录环节的滑块验证——尤其是部分网站风控严格,不仅滑块难滑,甚至会识别 Playwright 自动化浏览器,直接提示「操作过于频繁」,导致脚本无法正常运行。近期在测试时,我踩遍了滑块登录的坑,最终摸索出一套「绕过滑块、免登录直接打开页面,再进行脚本录制」的完整方案,亲测100%有效,今天整理成博客,分享给有同样困扰的小伙伴。

一、问题背景:滑块登录+风控拦截

最初使用 Playwright 做自动化时,直接启动浏览器访问登录页,遇到两个致命问题:

  • 1. 滑块验证无法自动化绕过,手动滑动后仍提示「操作过于频繁」,推测网站检测到了 Playwright 自动化特征(如 navigator.webdriver 标记);

  • 2. 尝试保存登录状态、接管浏览器等方法,要么报错「连接失败」「端口被占用」,要么打开后仍是登录页,无法继承手动登录状态;

核心痛点:网站风控拦截自动化浏览器,常规登录+录制方法完全失效,需找到「既绕开滑块,又能让 Playwright 正常录制」的解决方案。

二、核心思路:手动登录保存状态,免登录打开页面再录制

既然网站会拦截 Playwright 启动的浏览器,那我们就换个思路:用「本机正常 Chrome 手动登录」,保存登录状态后,让 Playwright 加载该状态,直接打开目标页面(无需再登录、无需滑滑块),此时再进行脚本录制,即可完美绕开风控和滑块。

整体流程:手动登录并保存状态 → 加载登录状态打开目标页面 → 启动 Playwright 录制 → 生成自动化脚本,全程无滑块、无频繁提示。

三、分步操作:从0到1实现免登录录制(亲测可复现)

前提准备

1. 已安装 Playwright(若未安装,执行命令:pip install playwright,再执行 playwright install 安装浏览器驱动);

2. 本机安装 Chrome 浏览器(确保是常用版本,避免驱动不兼容);

步骤1:手动登录,保存登录状态(只做1次)

首先编写一段「保存登录状态」的脚本,核心作用是:用 Playwright 启动浏览器,手动完成登录后,将登录态(cookie、localStorage 等)保存到本地文件,后续可直接加载使用,无需重复登录。

创建文件 save_login_state.py,复制以下代码(直接运行即可):

from playwright.sync_api import sync_playwright

# 登录状态保存路径(可自定义,建议和后续脚本放在同一目录)
STATE_FILE = "login_state.json"
# 登录页地址
LOGIN_URL = "你的网站登录地址"

def save_login_state():
    with sync_playwright() as p:
        # 启动浏览器(显示界面,关闭无头模式,添加防检测参数)
        browser = p.chromium.launch(
            headless=False,
            args=["--disable-blink-features=AutomationControlled"]
        )
        context = browser.new_context()
        page = context.new_page()

        # 打开登录页
        page.goto(LOGIN_URL)
        print("=" * 60)
        print("👉 请在弹出的浏览器中手动操作:")
        print("   1) 输入账号、密码")
        print("   2) 完成滑块验证(慢慢滑,避免提示频繁)")
        print("   3) 点击登录,成功进入商品管理后台")
        print("👉 登录成功后,回到命令行按【回车】保存登录状态")
        print("=" * 60)

        # 手动控制保存时机,避免自动等待卡死
        input("\n登录成功后,按回车保存登录状态...")

        # 保存完整登录态(cookie + localStorage + sessionStorage)
        context.storage_state(path=STATE_FILE)
        print(f"✅ 登录状态已保存到:{STATE_FILE}(后续可直接加载使用)")

        # 关闭浏览器
        browser.close()

if __name__ == "__main__":
    save_login_state()

运行脚本后,按提示操作:

  • 1. 弹出 Chrome 浏览器,手动输入账号密码、滑动滑块,登录成功进入商品管理页;

  • 2. 回到命令行,按回车键,脚本会自动保存登录状态到 login_state.json 文件;

  • 3. 保存成功后,命令行会提示「登录状态已保存」,此时可关闭浏览器。

    步骤2:验证免登录打开页面(可选,确保状态有效)

    为了确认登录状态保存成功,可编写一段「加载登录状态、直接目标页面」的脚本,测试是否无需登录即可进入。

    创建文件 open_product_page.py,复制以下代码:

  • from playwright.sync_api import sync_playwright
    
    # 加载之前保存的登录状态文件
    STATE_FILE = "login_state.json"
    # 目标页面
    TARGET_URL = "你想要录制的页面"
    
    # 函数:打开目标页面(免登录)
    def open_product_page():
        with sync_playwright() as p:
            browser = p.chromium.launch(
                headless=False,
                args=["--disable-blink-features=AutomationControlled"]
            )
            # 加载登录状态,免登录进入
            context = browser.new_context(storage_state=STATE_FILE)
            page = context.new_page()
    
            # 直接打开
            page.goto(TARGET_URL)
            print("✅ 已免登录打开页面,当前地址:", page.url)
    
            # 保持浏览器打开,方便确认
            input("按回车关闭浏览器...")
            browser.close()
    
    if __name__ == "__main__":
        open_product_page()

    运行脚本后,若能直接打开(无需登录、无滑块),说明登录状态保存成功;若仍跳登录页,重新执行步骤1(确保登录成功后再按回车保存)。

    步骤3:免登录启动录制,生成自动化脚本

    登录状态验证通过后,即可启动 Playwright 录制功能——此时 Playwright 会加载登录状态,直接打开目标页面,我们在页面上的所有操作,都会被自动录制并生成代码。

    操作步骤:

  • 打开 CMD 命令行(或 PowerShell),进入「login_state.json 文件所在的目录」(关键!否则会找不到登录状态文件);

  • 在终端中输入以下命令,启动录制(直接复制运行):

  • playwright codegen --load-storage login_state.json 目标页面
  • 录制完成后,关闭浏览器和录制窗口,将录制窗口中的代码复制到本地 .py 文件,即可直接运行(无需再处理登录和滑块)

    四、常见问题&避坑指南(亲测踩过的坑)

    坑1:启动录制时提示「找不到 login_state.json」

    原因:命令行未进入「login_state.json 所在目录」,Playwright 无法加载登录状态。

    解决:重新进入目录(按步骤3的方法),再执行录制命令。

    坑2:加载登录状态后,仍跳登录页

    原因:登录状态保存不完整(比如未登录成功就按了回车),或登录状态过期。

    解决:删除旧的 login_state.json,重新执行步骤1,确保登录成功后再保存状态。

    坑3:录制命令报错「retrieving websocket url」

    原因:之前启动的浏览器未关闭,端口被占用,或 Chrome 路径配置异常。

    解决:关闭所有 Chrome 浏览器,重新执行录制命令;若仍报错,重启电脑后再尝试。

    坑4:手动登录时,一直提示「操作过于频繁」

    原因:网站风控标记了当前 IP 或浏览器环境。

    解决:关闭所有浏览器,断网5-10分钟,或切换手机热点(换 IP),再重新手动登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值