diag-post-verify.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * diag-post-verify.js — 评论是否真的发出去了?用评论列表做地面真相校验
  3. *
  4. * 思路:发评论前后各抓一次评论列表的可见文案,做差集。
  5. * 只有在"发布后新出现"的文案才算真凭实据——比只看计数可靠得多
  6. * (实测遇到过计数不刷新、但评论确实已发布的情况)。
  7. *
  8. * 会真的发一条评论(用 config 的评论池第一条)。不点"发送"以外的任何写操作。
  9. */
  10. var cfg = TikTokAuto.config.resolve({ runtime: { dryRun: false } });
  11. var t = TikTokAuto.tiktok;
  12. var l = TikTokAuto.layout;
  13. var w = TikTokAuto.wait;
  14. function visibleTexts(limit) {
  15. var texts = className('android.widget.TextView').find();
  16. var out = [];
  17. for (var i = 0; i < texts.size(); i += 1) {
  18. var node = texts.get(i);
  19. if (!l.isVisible(node)) {
  20. continue;
  21. }
  22. var value = l.text(node);
  23. if (value && value.length >= 2) {
  24. out.push(value);
  25. }
  26. if (out.length >= limit) {
  27. break;
  28. }
  29. }
  30. return out;
  31. }
  32. function openCommentList() {
  33. if (t.panelInput() !== null) {
  34. return true;
  35. }
  36. var button = t.commentButton();
  37. if (!button) {
  38. return false;
  39. }
  40. TikTokAuto.ui.clickNode(button, 'diag');
  41. return w.waitFor('diag', function () {
  42. return t.panelInput() !== null ? true : null;
  43. }, 8000, 200) === true;
  44. }
  45. function closePanel() {
  46. if (t.panelInput() !== null) {
  47. back();
  48. w.tick(600);
  49. }
  50. }
  51. function diff(before, after) {
  52. var added = [];
  53. for (var i = 0; i < after.length; i += 1) {
  54. if (before.indexOf(after[i]) === -1) {
  55. added.push(after[i]);
  56. }
  57. }
  58. return added;
  59. }
  60. // ---- 就位:必须在播放页 ----
  61. if (t.pageState() !== 'player') {
  62. console.log('DIAG 当前不在播放页(' + t.pageState() + '),尝试打开第一个卡片');
  63. var cards = t.videoCards();
  64. console.log('DIAG 卡片数=' + cards.length);
  65. if (cards.length > 0) {
  66. TikTokAuto.ui.clickNode(cards[0].container, 'diag');
  67. TikTokAuto.player.waitPlayerReady(cfg, 'diag');
  68. }
  69. }
  70. console.log('DIAG state=' + t.pageState() + ' count=' + t.commentCount());
  71. // ---- 发布前:抓一次评论列表 ----
  72. console.log('DIAG 打开评论列表(发布前)…');
  73. openCommentList();
  74. var before = visibleTexts(30);
  75. console.log('DIAG 发布前可见文案 ' + before.length + ' 条:' + JSON.stringify(before.slice(0, 12)));
  76. closePanel();
  77. // ---- 发布 ----
  78. var text = cfg.comments.pool[0];
  79. console.log('DIAG 准备发布:' + JSON.stringify(text) + ',发布前计数=' + t.commentCount());
  80. var result = TikTokAuto.comment.post(cfg, text, 'diag');
  81. console.log('DIAG 发布返回:' + JSON.stringify(result));
  82. // ---- 发布后:再抓一次评论列表 ----
  83. w.tick(2500);
  84. console.log('DIAG 发布后计数=' + t.commentCount());
  85. console.log('DIAG 打开评论列表(发布后)…');
  86. openCommentList();
  87. var after = visibleTexts(30);
  88. console.log('DIAG 发布后可见文案 ' + after.length + ' 条:' + JSON.stringify(after.slice(0, 12)));
  89. console.log('DIAG 新增文案=' + JSON.stringify(diff(before, after)));
  90. console.log('DIAG 目标文案在列表里=' + (after.indexOf(text) !== -1));