我正在尝试为DeviantArt.com编写一个greasemonkey脚本,如果我访问指定的个人资料,它将发送评论。我已经编写了可以输入我要发送的文本的脚本,但是发送它时遇到了问题。
我点击“提交评论”按钮的代码应该是:
$(".smbutton.smbutton-green.smbutton-big.comment-submit").first().click()
选择器很好,它完美地选择了“提交注释”按钮元素,但脚本不会单击它。
最令人好奇的是 - 如果我将这一行粘贴到浏览器的控制台上,那就完美了!
那些人也不行:
$(".smbutton.smbutton-green.smbutton-big.comment-submit")[0].click()
$(".smbutton.smbutton-green.smbutton-big.comment-submit")[0].trigger('click')
包含此行的完整脚本: `
// ==UserScript==
// @name DaHubAutoClicker
// @version 1.0
// @description
// @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// @match http://dahub.deviantart.com/
// @match http://*.deviantart.com/*
// ==/UserScript==
console.log("### DaHubAutoClicker started ###")
function sendd(){
console.log("sending")
$(".smbutton.smbutton-green.smbutton-big.comment-submit").first().click()
}
/* ############################################################ DaHub */
if(document.domain == "dahub.deviantart.com"){
console.log("### DaHub")
$("#commentbody").click(); /*IMPORTANT: the submit button appears after clicking that element*/
setTimeout(function(){
$('.writer.no-lub.put-art-here.ui-droppable').text('newest');
setTimeout(function(){sendd()},3500)
},1500)
}
/* ############################################################ Inne */
else{
console.log("### Outside DaHub")
}
`
所有其余的代码完全正常工作。
我的代码出了什么问题? 或者提交/发送评论的另一种方式是什么?
答案 0 :(得分:2)
非常确定您无法模拟点击次数。使用click()
只会为该元素调用click
事件处理程序,该处理程序可能未注册。如果相关按钮负责提交表单,则可能值得尝试直接提交表单,如下所示:
document.getElementById("myForm").submit();
另一方面,如果提交功能与AJAX一起工作(即通过javascript),则值得查看源代码并查找处理注释的确切函数,然后您可以直接调用该函数。
答案 1 :(得分:0)
DeviantArt的脚本无法查看在更改后仍然处于活动状态时是否有写入的内容,而无法发送空消息。
代码在控制台中工作,因为当点击控制台时,textarea失去了焦点,而当我让脚本执行此操作时,由于没有使用鼠标,textarea仍然处于聚焦状态。
在调用发送按钮之前使用$(':focus').blur()
修复了问题。