You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puppeteer使用match时如何获取完整的@@@前缀用户名而非仅匹配标识

解决Discord消息中提取Roblox用户名的问题

问题核心原因

Discord的富文本渲染会把特殊前缀(比如@@@)拆成独立DOM节点,直接取元素文本容易只拿到部分内容;另外如果没等消息完全渲染就提取,也会出现截取不全的情况。

解决方案

  1. 等待元素完全加载
    先确保目标消息元素已经可见,避免在内容未渲染完成时操作:
await page.waitForSelector('.markup-eYLPri.messageContent-2t3eCI', { visible: true, timeout: 5000 });
  1. 拼接所有子节点文本
    把消息元素下所有子节点的文本拼接起来,拿到完整的消息内容:
const fullMessage = await page.$eval('.markup-eYLPri.messageContent-2t3eCI', el => {
  return Array.from(el.childNodes)
    .map(node => node.textContent || '')
    .join('')
    .trim();
});
  1. 正则提取目标内容
    用正则匹配@@@+用户名格式的字符串,分别获取完整标签和单独的用户名:
const robloxMatch = fullMessage.match(/@@@([A-Za-z0-9_]+)/);
if (robloxMatch) {
  const fullTag = robloxMatch[0]; // 完整的@@@用户名(比如@@@RobloxPlayer123)
  const username = robloxMatch[1]; // 单独的用户名(比如RobloxPlayer123)
  console.log('完整标签:', fullTag);
  console.log('Roblox用户名:', username);
  // 这里添加将用户名传入其他网站的逻辑
} else {
  console.log('未检测到符合格式的Roblox用户名');
}

完整代码示例

const puppeteer = require('puppeteer');

async function extractRobloxUsername() {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  
  // 导航到目标Discord频道页面
  await page.goto('你的Discord频道URL');
  
  // 等待消息元素加载完成
  await page.waitForSelector('.markup-eYLPri.messageContent-2t3eCI', { visible: true, timeout: 5000 });
  
  // 获取完整消息文本
  const fullMessage = await page.$eval('.markup-eYLPri.messageContent-2t3eCI', el => {
    return Array.from(el.childNodes)
      .map(node => node.textContent || '')
      .join('')
      .trim();
  });
  
  // 提取Roblox用户名
  const robloxMatch = fullMessage.match(/@@@([A-Za-z0-9_]+)/);
  if (robloxMatch) {
    const fullTag = robloxMatch[0];
    const username = robloxMatch[1];
    console.log('完整标签:', fullTag);
    console.log('Roblox用户名:', username);
    // 示例:传入其他网站
    // await page.goto(`https://目标网站.com?username=${encodeURIComponent(username)}`);
  } else {
    console.log('未找到符合格式的Roblox用户名');
  }
  
  await browser.close();
}

extractRobloxUsername();

额外提示

  • 如果页面有多个消息元素,用$$eval遍历所有元素后逐个匹配正则
  • 正则里的[A-Za-z0-9_]+对应Roblox用户名的合法字符,若有特殊需求可调整正则规则

内容的提问来源于stack exchange,提问作者KateLibby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:50:25