Instagram自动化评论

时间:2019-11-28 09:42:07

标签: javascript dom instagram

我正在尝试对Instagram评论进行一些自动化。这是我的代码:

var comment_text = document.getElementsByClassName('Ypffh')[0];
comment_text.click();
comment_text.focus();

var text = "This is my comment :)";
var l = text.length;
var current = 0;
var time = 100;

var write_text = function() {
  comment_text.value += text[current];
  if (current < l - 1) {
    current++;
    setTimeout(function() {
      write_text()
    }, time);
  } else {
    comment_text.setAttribute('value', comment_text.value);
    comment_text.textContent = comment_text.value;
  }
}
setTimeout(function() {
  write_text()
}, time);

setTimeout(function() {
  var submit_button = document.getElementsByClassName('y3zKF')[0];
  submit_button.disabled = false;
  submit_button.click();

  var comment_form = document.getElementsByClassName('X7cDz')[0];
  comment_form.submit();
}, 2000);

但是运行此代码后,我可以看到以下内容:

  1. 注释文本正按预期方式在文本区域中键入。但! “发布”(评论)按钮保持禁用状态。如果我自己输入文本-此按钮将启用。
  2. 从代码中可以看到-键入完毕后,该按钮被强制激活并收到一个“单击”事件,但是什么也没发生。
  3. 然后表单收到一个“提交”事件-但是我只有Instagram的错误页面,仅此而已。

问题是:我在做什么错?我知道诸如Puppeteer之类的无头解决方案,或者关于使用具有正确CSRF令牌的对https://www.instagram.com/web/comments/[POST_ID]/add/的直接请求,但是我希望通过DOM操作来做到这一点。这可能吗?感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

设置器value不能按需要工作,因为React库会覆盖输入值设置器,但是您可以直接在输入中作为上下文调用函数。

var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
nativeInputValueSetter.call(comment_text, "This is my comment :)");

var ev2 = new Event('input', { bubbles: true});
comment_text.dispatchEvent(ev2);

这应该正确地更新值并启用post按钮来提交评论