我正在尝试对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);
但是运行此代码后,我可以看到以下内容:
问题是:我在做什么错?我知道诸如Puppeteer之类的无头解决方案,或者关于使用具有正确CSRF令牌的对https://www.instagram.com/web/comments/[POST_ID]/add/的直接请求,但是我希望通过DOM操作来做到这一点。这可能吗?感谢您的帮助。
答案 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
按钮来提交评论