我正在尝试对 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);
但是运行此代码后我可以看到以下内容:
- 正如预期的那样,评论文本正在文本区域中输入。但! “发布”(评论)按钮保持禁用状态。如果我自己输入文本 - 此按钮将启用。
- 从代码中可以看出,输入完成后,该按钮被强制激活并收到“click”事件,但没有任何反应。
- 然后,表单收到“提交”事件 - 但我只有一个来自 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/