【问题标题】:How can I enable a disabled button with Greasemonkey?如何使用 Greasemonkey 启用禁用的按钮?
【发布时间】:2018-12-08 23:36:03
【问题描述】:

我的目标是这个网站:https://ib.ing.cz/transactional-cz/#login/credentials

它有一个输入表单,我可以使用它来填写

document.querySelector('input[name=customer-id]').value = "1234567890";

但是,让我走得更远的按钮被禁用了。无论我尝试什么,它都会一直如此,直到我开始手动填写表格。如何启用该按钮(理想情况下也可以通过编程方式单击它)?我尝试模拟按键或操作按钮的“禁用”属性,但没有成功。

更新:我终于让它工作了,我正在使用的代码在这里:https://greasyfork.org/en/scripts/375326-p%C5%99ihla%C5%A1-se-na-ing (由于某种原因,我不得不从答案中删除 if/else 语句,在脚本的上下文中条件不正确,即使它在 Firefox 控制台中)

但是,当我单击按钮(手动或通过脚本)时,还有一些更神奇的东西阻止了此操作,并收到一条错误消息,提示“网站出现故障”。

原来还需要添加“更改”事件。答案中的原始链接导致了一个引用 Firebug 的老问题,该问题已被合并到 Firefox 中。我的关键是使用调试器。只需在网站上单击鼠标右键并选择“检查此元素”。在检查器中单击这些小三角形后,可以找到与这些元素相关的事件:

而且为了阅读网站代码,最好将他们发送的乱码放入美化器中,如下所示:https://beautifier.io/

【问题讨论】:

    标签: javascript greasemonkey tampermonkey


    【解决方案1】:

    参考Choosing and activating the right controls on an AJAX-driven site

    您的target site 在输入的祖先 div 上的keyup 事件上运行其“客户编号”验证(以启用该按钮等)。

    这意味着您必须在设置值后发送一个 keyup 事件,并确保该事件从输入冒泡。

    像这样:

    var cIdInpt = document.querySelector ('input[name=customer-id]');
    if (cIdInpt) {
        var keyupEvnt   = new Event ('keyup', {bubbles: true} );  //  no key code needed in this case.
        cIdInpt.value   = "1234567890";
    
        cIdInpt.dispatchEvent (keyupEvnt);
    }
    else {
        console.error ("cIdInpt not found.");
    }
    

    【讨论】:

    • 非常感谢!这让我更进一步。但是,现在该网站声称它出现故障(我更新了原始问题的详细信息)。我实际上阅读了您发布的链接并访问了 ib.ing.cz/transactional-cz/modules/login/... 但不幸的是,这对我来说只是胡言乱语(并且未格式化),我对 javascript 不太熟练。
    • 不幸的是我仍然停留在错误消息中:-(。
    • @sup,您的问题已得到解答。 Don't move the goalposts。 ... 此外, 问题,可能可以使用识别必要事件序列的相同技术来解决。如果必须提出一个新问题,请不要改变这个问题的范围。
    • 好的。我终于明白你从哪里得到这些事件了。我以为是阅读网站的代码,但他们就坐在检查员那里!链接的答案是关于现在具有不同界面的萤火虫,这让我感到困惑。但是感谢您为我指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2015-05-06
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多