@xbrowser/twitter 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,33 @@
1
+ # Changelog
2
+
3
+ ## [2.0.0] - 2026-05-10
4
+
5
+ ### Added
6
+ - 新增 `timeline-advanced` 命令:高级时间线功能,针对高影响力账号优化
7
+ - 新增 `tweets` 命令:获取单条推文详情
8
+ - 新增 `replies` 命令:获取推文回复
9
+ - 新增多级选择器策略,提高抓取稳定性
10
+ - 新增动态等待机制,优化性能
11
+ - 新增人类行为模拟,降低被检测风险
12
+ - 新增高影响力账号自动识别(elonmusk, realDonaldTrump)
13
+ - 新增 CDP 连接检查和友好错误提示
14
+ - 新增 Session 隔离支持
15
+
16
+ ### Changed
17
+ - 优化 `search` 命令,增强数据解析能力和错误处理
18
+ - 优化 `profile` 命令,提高用户资料提取准确性
19
+ - 优化 `timeline` 命令,改进滚动加载和去重逻辑
20
+
21
+ ### Fixed
22
+ - 修复 DOM 选择器脆弱导致的问题
23
+ - 修复高影响力用户名大小写匹配问题
24
+ - 修复网络请求监听失败导致的命令中断
25
+
26
+ ### Documentation
27
+ - 新增完整的 README.md 文档
28
+ - 新增 54 个测试用例,覆盖所有功能
29
+ - 新增高影响力账号优化说明
30
+
31
+ ## [1.0.0] - Initial Release
32
+
33
+ - 初始版本,包含 search、profile、timeline 三个命令
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 XBrowser Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,576 @@
1
+ # XBrowser Twitter Plugin
2
+
3
+ **专业的 Twitter/X 数据采集工具** - 轻松获取推文、用户资料、时间线和回复数据,特别针对高影响力账号优化。
4
+
5
+ ---
6
+
7
+ ## 📝 简短介绍
8
+
9
+ XBrowser Twitter Plugin 是一个功能强大的 Twitter/X 数据采集插件,支持推文搜索、用户资料获取、时间线采集、推文详情和回复获取等功能。插件内置多级选择器策略、动态等待机制和人类行为模拟,确保数据采集的稳定性和准确性。
10
+
11
+ ---
12
+
13
+ ## 🎯 核心特性
14
+
15
+ ### 1. 多级选择器策略
16
+ - 自动适配 DOM 结构变化
17
+ - 多重备选选择器提高抓取稳定性
18
+ - 智能回退机制
19
+
20
+ ### 2. 高影响力账号优化
21
+ - 自动识别 @elonmusk、@realDonaldTrump 等高影响力账号
22
+ - 应用增强配置(更长等待、更多滚动)
23
+ - 智能重试机制
24
+
25
+ ### 3. 动态等待机制
26
+ - 智能等待内容加载完成
27
+ - 可配置超时时间
28
+ - 减少数据缺失
29
+
30
+ ### 4. 人类行为模拟
31
+ - 模拟真实用户滚动行为
32
+ - 随机滚动距离和延迟
33
+ - 降低被检测风险
34
+
35
+ ### 5. Session 隔离
36
+ - 支持多任务并行
37
+ - 独立浏览器实例
38
+ - 避免状态污染
39
+
40
+ ### 6. 完整的错误处理
41
+ - 友好的错误提示
42
+ - 自动重试机制
43
+ - CDP 连接检查
44
+
45
+ ### 7. 丰富的数据字段
46
+ - 推文内容、时间、链接
47
+ - 互动数据(点赞、转推、回复、浏览)
48
+ - 用户信息(名称、用户名、简介、粉丝)
49
+
50
+ ### 8. Zod 数据验证
51
+ - 确保返回数据结构正确
52
+ - 类型安全
53
+ - 减少运行时错误
54
+
55
+ ---
56
+
57
+ ## 💡 使用场景
58
+
59
+ ### 1. 市场调研
60
+ - 监控品牌关键词
61
+ - 分析用户讨论热度
62
+ - 追踪竞争对手动态
63
+
64
+ ### 2. 内容创作
65
+ - 搜集热门话题
66
+ - 获取行业领袖观点
67
+ - 寻找创作灵感
68
+
69
+ ### 3. 数据分析
70
+ - 推文互动数据分析
71
+ - 用户行为模式研究
72
+ - 趋势预测
73
+
74
+ ### 4. 社交媒体管理
75
+ - 监控账号表现
76
+ - 回复用户反馈
77
+ - 分析粉丝互动
78
+
79
+ ### 5. 新闻媒体
80
+ - 实时追踪新闻事件
81
+ - 获取第一手信息
82
+ - 监控公共人物动态
83
+
84
+ ### 6. 学术研究
85
+ - 社交网络分析
86
+ - 舆情研究
87
+ - 用户行为研究
88
+
89
+ ---
90
+
91
+ ## 📦 安装方式
92
+
93
+ 插件已内置在 XBrowser 中,无需额外安装。
94
+
95
+ ### 前置要求
96
+ - Chrome 浏览器
97
+ - CDP 连接(`--cdp 9221`)
98
+ - 登录态(可选,用于访问受保护内容)
99
+
100
+ ### 启动 Chrome 远程调试
101
+
102
+ ```bash
103
+ # macOS/Linux
104
+ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9221
105
+
106
+ # 或使用 xbrowser 内置命令
107
+ xbrowser chrome --cdp 9221
108
+ ```
109
+
110
+ ---
111
+
112
+ ## 🚀 快速开始
113
+
114
+ ### 1. 搜索推文
115
+
116
+ ```bash
117
+ xbrowser --cdp 9221 twitter search --query "OpenAI" --limit 20
118
+ ```
119
+
120
+ **返回示例:**
121
+ ```json
122
+ {
123
+ "data": [
124
+ {
125
+ "id": "1234567890",
126
+ "author": "Elon Musk",
127
+ "handle": "@elonmusk",
128
+ "text": "OpenAI is doing amazing work!",
129
+ "time": "2026-05-10T12:00:00Z",
130
+ "link": "https://x.com/elonmusk/status/1234567890",
131
+ "replies": "1234",
132
+ "retweets": "5678",
133
+ "likes": "90123",
134
+ "views": "1.2M"
135
+ }
136
+ ],
137
+ "tips": [
138
+ "Session: default",
139
+ "找到 20 条推文"
140
+ ]
141
+ }
142
+ ```
143
+
144
+ ### 2. 获取用户资料
145
+
146
+ ```bash
147
+ xbrowser --cdp 9221 twitter profile --username "elonmusk"
148
+ ```
149
+
150
+ **返回示例:**
151
+ ```json
152
+ {
153
+ "data": {
154
+ "name": "Elon Musk",
155
+ "handle": "@elonmusk",
156
+ "bio": "Mars, cars, robots & the occasional meme",
157
+ "following": "850",
158
+ "followers": "200.5M",
159
+ "verified": true
160
+ },
161
+ "tips": [
162
+ "Session: default"
163
+ ]
164
+ }
165
+ ```
166
+
167
+ ### 3. 获取用户时间线
168
+
169
+ ```bash
170
+ xbrowser --cdp 9221 twitter timeline --username "elonmusk" --limit 10
171
+ ```
172
+
173
+ **返回示例:**
174
+ ```json
175
+ {
176
+ "data": {
177
+ "username": "elonmusk",
178
+ "count": 10,
179
+ "tweets": [
180
+ {
181
+ "text": "Just launched a new rocket!",
182
+ "time": "2026-05-10T11:30:00Z",
183
+ "likes": "45678",
184
+ "replies": "2345",
185
+ "link": "https://x.com/elonmusk/status/1234567890",
186
+ "id": "1234567890"
187
+ }
188
+ ]
189
+ },
190
+ "tips": [
191
+ "Session: default",
192
+ "elonmusk 最近 10 条推文"
193
+ ]
194
+ }
195
+ ```
196
+
197
+ ### 4. 获取高影响力账号时间线(推荐)
198
+
199
+ ```bash
200
+ # 马斯克时间线
201
+ xbrowser --cdp 9221 twitter timeline-advanced --username "elonmusk" --limit 30
202
+
203
+ # 川普时间线(使用登录)
204
+ xbrowser --cdp 9221 twitter timeline-advanced --username "realdonaldtrump" --useLogin
205
+ ```
206
+
207
+ **返回示例:**
208
+ ```json
209
+ {
210
+ "data": {
211
+ "username": "elonmusk",
212
+ "count": 30,
213
+ "tweets": [
214
+ {
215
+ "text": "Exciting news coming soon!",
216
+ "time": "2026-05-10T12:00:00Z",
217
+ "likes": "78901",
218
+ "replies": "3456",
219
+ "retweets": "12345",
220
+ "link": "https://x.com/elonmusk/status/1234567890",
221
+ "id": "1234567890",
222
+ "author": "Elon Musk",
223
+ "handle": "@elonmusk"
224
+ }
225
+ ]
226
+ },
227
+ "tips": [
228
+ "Session: default",
229
+ "检测到高影响力账号,使用增强配置",
230
+ "elonmusk 最近 30 条推文"
231
+ ]
232
+ }
233
+ ```
234
+
235
+ ### 5. 获取单条推文详情
236
+
237
+ ```bash
238
+ xbrowser --cdp 9221 twitter tweets --tweetId "1234567890"
239
+ ```
240
+
241
+ **返回示例:**
242
+ ```json
243
+ {
244
+ "data": {
245
+ "id": "1234567890",
246
+ "author": "Elon Musk",
247
+ "handle": "@elonmusk",
248
+ "text": "This is a tweet!",
249
+ "time": "2026-05-10T12:00:00Z",
250
+ "link": "https://x.com/elonmusk/status/1234567890",
251
+ "replies": "1234",
252
+ "retweets": "5678",
253
+ "likes": "90123",
254
+ "views": "1.2M"
255
+ },
256
+ "tips": [
257
+ "Session: default"
258
+ ]
259
+ }
260
+ ```
261
+
262
+ ---
263
+
264
+ ## 🌟 高影响力账号优化
265
+
266
+ 插件自动识别以下高影响力账号并应用优化策略:
267
+
268
+ ### 支持的账号
269
+ - **@elonmusk** - 埃隆·马斯克
270
+ - **@realdonaldtrump** - 唐纳德·川普
271
+ - **@realdonaldtrump_backup** - 川普备用账号
272
+
273
+ ### 优化内容
274
+ 1. **更长等待时间**
275
+ - 高影响力账号:20 秒超时
276
+ - 普通账号:15 秒超时
277
+
278
+ 2. **更多滚动迭代**
279
+ - 高影响力账号:8 次滚动
280
+ - 普通账号:5 次滚动
281
+
282
+ 3. **更长滚动延迟**
283
+ - 高影响力账号:1.5 秒
284
+ - 普通账号:1 秒
285
+
286
+ 4. **智能重试**
287
+ - 高影响力账号:3 次重试
288
+ - 普通账号:1 次重试
289
+
290
+ 5. **用户名大小写不敏感**
291
+ - `elonmusk`, `ElonMusk`, `ELONMUSK` 都可以
292
+ - 自动转换为小写进行匹配
293
+
294
+ ### 使用示例
295
+
296
+ ```bash
297
+ # 所有以下命令都会自动应用高影响力账号优化
298
+ xbrowser --cdp 9221 twitter timeline-advanced --username "elonmusk" --limit 30
299
+ xbrowser --cdp 9221 twitter timeline-advanced --username "ElonMusk" --limit 30
300
+ xbrowser --cdp 9221 twitter timeline-advanced --username "ELONMUSK" --limit 30
301
+
302
+ # 川普账号(推荐使用登录态)
303
+ xbrowser --cdp 9221 twitter timeline-advanced --username "realdonaldtrump" --useLogin
304
+ xbrowser --cdp 9221 twitter timeline-advanced --username "RealDonaldTrump" --useLogin
305
+ ```
306
+
307
+ ---
308
+
309
+ ## 🔧 技术亮点
310
+
311
+ ### 1. 多级选择器策略
312
+
313
+ ```typescript
314
+ // 智能选择器函数
315
+ function smartSelect(element: Element, selectors: string[]): Element | null {
316
+ for (const selector of selectors) {
317
+ const found = element.querySelector(selector);
318
+ if (found) return found;
319
+ }
320
+ return null;
321
+ }
322
+
323
+ // 使用示例
324
+ const userEl = smartSelect(article, [
325
+ '[data-testid="User-Name"] a',
326
+ '[class*="username"]',
327
+ 'a[href*="/"][tabindex="-1"]'
328
+ ]);
329
+ ```
330
+
331
+ ### 2. 动态等待机制
332
+
333
+ ```typescript
334
+ async function waitForContent(page: Page, selector: string, timeout = 10000): Promise<void> {
335
+ try {
336
+ await page.waitForSelector(selector, { timeout, state: 'attached' });
337
+ } catch (error) {
338
+ console.warn(`Selector ${selector} not found, continuing anyway`);
339
+ }
340
+ }
341
+ ```
342
+
343
+ ### 3. 人类行为模拟
344
+
345
+ ```typescript
346
+ async function simulateHumanScroll(page: Page): Promise<void> {
347
+ const scrollAmount = Math.random() * 500 + 500; // 500-1000 像素
348
+ await page.evaluate((amount) => window.scrollBy(0, amount), scrollAmount);
349
+ await page.waitForTimeout(Math.random() * 1000 + 500); // 500-1500 毫秒
350
+ }
351
+ ```
352
+
353
+ ### 4. 高影响力账号识别
354
+
355
+ ```typescript
356
+ const HIGH_PROFILE_USERS = new Set([
357
+ 'elonmusk',
358
+ 'realdonaldtrump',
359
+ 'realdonaldtrump_backup'
360
+ ]);
361
+
362
+ const isHighProfile = HIGH_PROFILE_USERS.has(username.toLowerCase());
363
+ const config = isHighProfile ? HIGH_PROFILE_CONFIG : DEFAULT_CONFIG;
364
+ ```
365
+
366
+ ### 5. Zod 数据验证
367
+
368
+ ```typescript
369
+ import { z } from 'zod';
370
+
371
+ const TweetSchema = z.object({
372
+ id: z.string(),
373
+ author: z.string(),
374
+ handle: z.string(),
375
+ text: z.string(),
376
+ time: z.string(),
377
+ link: z.string(),
378
+ likes: z.string(),
379
+ retweets: z.string(),
380
+ replies: z.string(),
381
+ views: z.string().optional(),
382
+ });
383
+
384
+ const result = TweetSchema.parse(data);
385
+ ```
386
+
387
+ ---
388
+
389
+ ## 📊 数据结构
390
+
391
+ ### 推文数据
392
+ ```typescript
393
+ interface Tweet {
394
+ id: string; // 推文 ID
395
+ author: string; // 作者名称
396
+ handle: string; // @用户名
397
+ text: string; // 推文内容
398
+ time: string; // 发布时间(ISO 8601)
399
+ link: string; // 推文链接
400
+ replies: string; // 回复数
401
+ retweets: string; // 转推数
402
+ likes: string; // 点赞数
403
+ views?: string; // 浏览数(可选)
404
+ }
405
+ ```
406
+
407
+ ### 用户资料
408
+ ```typescript
409
+ interface Profile {
410
+ name: string; // 显示名称
411
+ handle: string; // @用户名
412
+ bio: string; // 简介
413
+ following: string; // 关注数
414
+ followers: string; // 粉丝数
415
+ verified: boolean; // 是否认证
416
+ }
417
+ ```
418
+
419
+ ### 时间线数据
420
+ ```typescript
421
+ interface Timeline {
422
+ username: string; // 用户名
423
+ count: number; // 推文数量
424
+ tweets: Tweet[]; // 推文数组
425
+ }
426
+ ```
427
+
428
+ ### 搜索结果
429
+ ```typescript
430
+ interface SearchResult {
431
+ data: Tweet[]; // 推文数组
432
+ tips: string[]; // 提示信息
433
+ }
434
+ ```
435
+
436
+ ---
437
+
438
+ ## ❓ 常见问题(FAQ)
439
+
440
+ ### Q: CDP 连接失败怎么办?
441
+
442
+ **A:** 确保使用 `--cdp 9221` 参数,并先启动 Chrome 的远程调试:
443
+
444
+ ```bash
445
+ # macOS/Linux
446
+ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9221
447
+
448
+ # 或使用 xbrowser 内置命令
449
+ xbrowser chrome --cdp 9221
450
+ ```
451
+
452
+ ### Q: 如何提高抓取成功率?
453
+
454
+ **A:** 使用 `timeline-advanced` 命令,并添加 `--useLogin` 参数:
455
+
456
+ ```bash
457
+ xbrowser --cdp 9221 twitter timeline-advanced --username "elonmusk" --useLogin
458
+ ```
459
+
460
+ ### Q: 数据不完整?
461
+
462
+ **A:** 尝试以下方法:
463
+ - 增加 `--limit` 参数值
464
+ - 使用 `--useLogin` 参数
465
+ - 检查网络连接
466
+ - 使用 `timeline-advanced` 命令
467
+
468
+ ### Q: 被限流或封号?
469
+
470
+ **A:**
471
+ - 降低请求频率
472
+ - 使用 `--session` 参数隔离不同任务
473
+ - 添加人类行为模拟间隔
474
+ - 避免在短时间内大量请求
475
+
476
+ ### Q: 如何获取受保护的内容?
477
+
478
+ **A:** 使用 `--useLogin` 参数,并确保浏览器已登录 Twitter/X:
479
+
480
+ ```bash
481
+ # 1. 启动 Chrome 并登录 Twitter
482
+ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9221
483
+
484
+ # 2. 使用 --useLogin 参数
485
+ xbrowser --cdp 9221 twitter timeline-advanced --username "username" --useLogin
486
+ ```
487
+
488
+ ### Q: 支持哪些命令?
489
+
490
+ **A:** 目前支持 6 个命令:
491
+ 1. `search` - 搜索推文
492
+ 2. `profile` - 获取用户资料
493
+ 3. `timeline` - 获取用户时间线
494
+ 4. `timeline-advanced` - 高级时间线(推荐)
495
+ 5. `tweets` - 获取单条推文详情
496
+ 6. `replies` - 获取推文回复
497
+
498
+ ### Q: 如何使用 Session 隔离?
499
+
500
+ **A:** 使用 `--session` 参数:
501
+
502
+ ```bash
503
+ # 任务 1:搜索 OpenAI
504
+ xbrowser --cdp 9221 --session task1 twitter search --query "OpenAI"
505
+
506
+ # 任务 2:搜索 AI(独立浏览器实例)
507
+ xbrowser --cdp 9221 --session task2 twitter search --query "AI"
508
+ ```
509
+
510
+ ### Q: 用户名大小写敏感吗?
511
+
512
+ **A:** 不敏感。插件会自动将用户名转换为小写进行匹配:
513
+
514
+ ```bash
515
+ # 以下命令效果相同
516
+ xbrowser --cdp 9221 twitter timeline --username "elonmusk"
517
+ xbrowser --cdp 9221 twitter timeline --username "ElonMusk"
518
+ xbrowser --cdp 9221 twitter timeline --username "ELONMUSK"
519
+ ```
520
+
521
+ ### Q: 如何获取更多推文?
522
+
523
+ **A:** 增加 `--limit` 参数值:
524
+
525
+ ```bash
526
+ # 获取 50 条推文
527
+ xbrowser --cdp 9221 twitter timeline-advanced --username "elonmusk" --limit 50
528
+
529
+ # 获取 100 条推文
530
+ xbrowser --cdp 9221 twitter timeline-advanced --username "elonmusk" --limit 100
531
+ ```
532
+
533
+ ### Q: 插件会触发 Twitter 的反爬虫吗?
534
+
535
+ **A:** 插件采用了多项反反爬虫措施:
536
+ - 人类行为模拟(随机滚动和延迟)
537
+ - 合理的请求频率
538
+ - 多级选择器策略减少请求次数
539
+ - Session 隔离避免状态污染
540
+
541
+ 但请注意,任何自动化工具都可能触发反爬虫机制,建议:
542
+ - 降低请求频率
543
+ - 使用真实的浏览器登录态
544
+ - 避免大规模采集
545
+
546
+ ---
547
+
548
+ ## 🔗 相关链接
549
+
550
+ - **文档**: [XBrowser 官方文档](https://docs.xbrowser.ai)
551
+ - **GitHub**: [XBrowser GitHub 仓库](https://github.com/xbrowser/xbrowser)
552
+ - **发布说明**: [RELEASE_NOTES.md](./RELEASE_NOTES.md)
553
+ - **更新日志**: [CHANGELOG.md](./CHANGELOG.md)
554
+ - **许可证**: [MIT License](./LICENSE)
555
+
556
+ ---
557
+
558
+ ## 📞 支持与反馈
559
+
560
+ 如果您在使用过程中遇到任何问题或有改进建议,欢迎通过以下方式反馈:
561
+
562
+ - **GitHub Issues**: [提交问题](https://github.com/xbrowser/xbrowser/issues)
563
+ - **邮件**: support@xbrowser.ai
564
+ - **社区**: [XBrowser 社区](https://community.xbrowser.ai)
565
+
566
+ ---
567
+
568
+ ## 📄 许可证
569
+
570
+ MIT License - 详见 [LICENSE](./LICENSE) 文件
571
+
572
+ ---
573
+
574
+ **版本**: v2.0.0
575
+ **发布日期**: 2026-05-10
576
+ **维护者**: XBrowser Team