吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 277|回复: 0
收起左侧

[其他原创] nodejs+playwright获取抖音弹幕

[复制链接]
alwaysol 发表于 2025-3-29 22:44
本帖最后由 alwaysol 于 2025-3-31 11:37 编辑

原理是直接后台浏览器打开直播网页,实时获取页面弹幕信息,简单粗暴,缺点是有点占内存
获取弹幕在终端显示,适合上班摸鱼看

QQ截图20250331103603.png
[JavaScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
const { chromium, firefox, webkit, devices } = require('playwright');
 
(async () => {
 
    const browser = await chromium.launch({
        headless: true, // 无头模式
    });
 
    try {
 
        const context = await browser.newContext({
            userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
        });
 
        // 创建新页面并访问网站
        const page = await context.newPage();
 
        // 拦截请求并阻止加载图片和视频流
        await page.route('**/*', (route) => {
            const url = route.request().url();
            const request = route.request();
            const resourceType = request.resourceType();
            if (resourceType == 'image' || resourceType == 'media') {
                //console.log(`阻止资源加载: ${url}`);
                route.abort();  // 阻止加载图片和视频
            }
            else {
                route.continue();  // 继续加载其他资源
            }
        });
 
        await page.goto('https://live.douyin.com/6096197105');//改成自己想看的主播直播地址
        await page.waitForTimeout(1000 * 5); // 等待 5 秒
 
        const element = await page.locator('.basicPlayer');
        await element.waitFor({ timeout: 1000 * 5 }); // 等待元素出现
        const text = await element.textContent();
        if(text.includes('直播已结束')){
            console.log('直播已结束,退出程序....');
            await browser.close();
            return;
        }
 
        //选择目标元素
        await page.waitForSelector('.webcast-chatroom___item-wrapper');
        console.log('页面加载完成....');
 
        await page.evaluate(() => {
            const elements = document.querySelectorAll('.basicPlayer');
            elements.forEach(element => {
                element.remove();
            });
        });
 
        let init_text = null;
        setInterval(async () => {
 
            const elements = await page.$$('.webcast-chatroom___item-wrapper');
 
            let texts = [];
            for (let element of elements) {
                const text = await element.innerText();
                //console.log(text);
                texts.push(text);
            }
 
            if (init_text == null) {
                texts.map(x => console.log(x));
            }
            else {
                const diff1 = texts.filter(item => !init_text.includes(item));
                diff1.map(x => console.log(x));
            }
            init_text = texts;
 
        }, 1000);
 
    } catch (error) {
        console.log('出现错误:', error);
        await browser.close();
    }
 
})();

免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
shian3 + 1 谢谢@Thanks!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-15 16:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表