javascript - Instagram 自动评论

标签 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. 从代码中可以看出,输入完成后,该按钮被强制激活并收到“click”事件,但没有任何反应。
  3. 然后,表单收到“提交”事件 - 但我只有一个来自 Instagram 的错误页面,仅此而已。

所以问题是:我做错了什么?我知道 headless 解决方案,例如 Puppeteer,或者使用直接请求 https://www.instagram.com/web/comments/[POST_ID]/add/具有正确的 CSRF token ,但我注意通过 DOM 操作来做到这一点。这可能吗?将不胜感激任何帮助。

最佳答案

Setter value 无法按您想要的方式工作,因为 React 库覆盖了输入值 setter,但您可以直接在输入上作为上下文调用该函数。

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按钮

关于javascript - Instagram 自动评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59085788/

相关文章:

javascript - 如何使用纯 JavaScript 中的一个递归函数动态创建一个依赖选择列表?

javascript - 在 </body> 之前运行代码,而不是等待 DOM Ready/DOMcontentloaded 事件

javascript - Instagram Graph API 拉动,可以工作,但运行缓慢,需要建议

javascript - Onsen - 动态添加 ons-carousel-items

javascript - 如何使 div 可排序?

javascript - 如何测试window.addEventListener函数

javascript - 如果不是 HREF Javascript 那么什么 [例如手机]

javascript - 在 laravel 5 中显示多个评级星 jquery bar 评级

javascript - 获取所有 DOM 事件的数组

api - 获得 public_content 的 Instagram 许可