使用Playwright删除微博所有帖子

引言

Playwright 是一个自动化测试工具,可以模拟用户在浏览器上的操作。

思路

采用Playwright中的异步API,实现自动删除所有微博脚本,并捕获异常从而实现检测已经删除所有微博的脚本

步骤

安装 Playwright

首先,安装Playwright:

pip install playwright

安装完 Playwright 后,运行以下命令以安装浏览器的二进制文件:

playwright install

手动登录微博

图片[1]- 使用Playwright删除微博所有帖子

编写脚本

新建脚本,初始化playwright

# -*- coding: utf-8 -*-
from playwright.async_api import async_playwright
import asyncio
​
async def delete_all_messages():
    asp = async_playwright()  # 获取异步 playwright 对象
    ap = await asp.start()  # 启动 playwright
    browser = await ap.chromium.launch_persistent_context(
        channel="chrome",   # 指定浏览器,这里使用chrome,还可以选择 firefox、webkit、msedge
        headless=False,   # 无头模式,就是是否显示浏览器界面
        user_data_dir=r'C:\Users\xiaof\AppData\Local\Google\Chrome\User Data',  # 指定用户数据目录,用于保存登录信息,每个浏览器保存目录都不同
        args=['--start-maximized'],   # 启动参数,这里设置浏览器最大化
        no_viewport=False,  # 禁用视窗
        devtools=False  # 进入浏览器后不启用开发者工具
    )  # 启动浏览器,配置参数
    page = await browser.new_page()    # 打开新页面
    await page.goto('https://weibo.com/u/7382469455?tabtype=feed')  # 个人中心的链接

选中这里复制CSS选择器路径,之后在locator方法中会用到,实现查找节点

图片[2]- 使用Playwright删除微博所有帖子
图片[3]- 使用Playwright删除微博所有帖子

如此重复直到删除一个帖子

    try:
        # 循环删除所有消息
        while True:
            await page.locator("#scroller > div.vue-recycle-scroller__item-wrapper > div:nth-child(1) > div > article > div > header > div.woo-box-flex > div.woo-pop-wrap.morepop_more_3ssan > span > div > i").click() # 这里是CSS选择器定位,也可以采用xpath或者以下的playwrightAPI定位
            # 这里是Playwright录制实现的定位,有关录制请查看	“相关链接”
            await page.get_by_role("button", name="删除").click()
            await page.get_by_role("button", name="确定").click()
    except Exception as e:
        # 有异常代表没有帖子了已经,删除完毕
        print("处理完成")

# 执行异步函数
asyncio.run(delete_all_messages())

执行脚本

将上面的代码保存为 delete_weibo.py,并使用命令 python delete_weibo.py 运行。

注意事项

Playwright可以录入脚本,具体可以参考以下链接

相关链接

微博 – 随时随地发现新鲜事 (weibo.com)

Installation | Playwright Python

从零开始:使用 Playwright 脚本录制实现自动化测试-阿里云开发者社区 (aliyun.com)

整体代码

# -*- coding: utf-8 -*-
from playwright.async_api import async_playwright
import asyncio
​
​
async def delete_all_messages():
    asp = async_playwright()  # 获取异步 playwright 对象
    ap = await asp.start()  # 启动 playwright
    browser = await ap.chromium.launch_persistent_context(
        channel="chrome",   # 指定浏览器,这里使用chrome,还可以选择 firefox、webkit、msedge
        headless=False,   # 无头模式,就是是否显示浏览器界面
        user_data_dir=r'C:\Users\xiaof\AppData\Local\Google\Chrome\User Data',  # 指定用户数据目录,用于保存登录信息,每个浏览器保存目录都不同
        args=['--start-maximized'],   # 启动参数,这里设置浏览器最大化
        no_viewport=False,  # 禁用视窗
        devtools=False  # 进入浏览器后不启用开发者工具
    )  # 启动浏览器,配置参数
    page = await browser.new_page()    # 打开新页面
    await page.goto('https://weibo.com/u/7382469455?tabtype=feed')  # 增加超时时间
    try:
        # 循环删除所有消息
        while True:
            await page.locator("#scroller > div.vue-recycle-scroller__item-wrapper > div:nth-child(1) > div > article > div > header > div.woo-box-flex > div.woo-pop-wrap.morepop_more_3ssan > span > div > i").click()
            await page.get_by_role("button", name="删除").click()
            await page.get_by_role("button", name  ="确定").click()
    except Exception as e:
        # 有异常代表没有帖子了已经,删除完毕
        print("处理完成")
​
# 执行异步函数
asyncio.run(delete_all_messages())
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容