【问题标题】:How do I programmatically click a button on this page when .click() does not work?当 .click() 不起作用时,如何以编程方式单击此页面上的按钮?
【发布时间】:2019-05-14 08:46:28
【问题描述】:

实际上,我正在开发一个扩展程序,帮助在闪购期间从 Flipkart 购买产品。在产品页面上,我无法在 JavaScript 的帮助下点击“立即购买”按钮,它告诉我 undefined 这是立即购买按钮的代码:

<form><button class="_2AkmmA _2Npkh4 _2kuvG8 _7UHT_c" type="button"><span class="_279WdV"></span> <!-- -->BUY NOW</button></form>

The Button is in this page

我正在使用代码在我的 JavaScript 文件中单击此按钮

$("._2AkmmA._2Npkh4._2kuvG8._7UHT_c").click();

但是,即使我转到 the page on the site 并在控制台中执行

$("._2AkmmA._2Npkh4._2kuvG8._7UHT_c").click();

控制台显示undefined,并且不启动通过手动使用鼠标单击“立即购买”按钮启动的“立即购买”过程。在控制台中,执行

$("._2AkmmA._2Npkh4._2kuvG8._7UHT_c");

演出:

<button class="_2AkmmA _2Npkh4 _2kuvG8 _7UHT_c" type="button"><span class="_279WdV"></span> <!-- -->BUY NOW</button>

这是我希望以编程方式单击的正确按钮。请注意,尽管我使用了$(),但返回的是不是 jQuery 对象。

如果我手动单击该按钮,则会显示“立即购买”对话框。你可以去this page自己试试。

  • 我不明白这里有什么问题。我的代码或其任何形式的 filpkart 网站方面的保护是否有任何问题?

【问题讨论】:

  • 您的代码按预期工作。
  • 您的代码没问题,可能是文档加载的问题。尝试将代码粘贴到控制台并尝试。您可能需要一个 settimeout/interval...
  • @Makyen 非常感谢您增加我关于 stackoverflow 的信息。而且您没有必要阅读该问题,请在放置任何 cmets 之前仔细阅读我已经明确提到该按钮无法通过单击给定网站链接上的 jQuery 来工作。我不认为这与 manifest.jons 文件有关
  • 真的很奇怪。无论如何,当我尝试获取按钮上的功能时,我得到的代码以return o.handleBuyNow=function(e){var t=o.props,n=t.wiggleSwatch,r=t.userState,i=t.data,s=t.location;if(e&amp;&amp;!a.i(E.f)(e))return!1;if("function"==typeof n)return n();o.setState({isBuying:!0});var c=h()(i,"action"),l=h()(s,"query.otracker"),u=c.params||{},d={products:y.a.getValueFromCurrentContext("products")}; 开头。使用$("._2AkmmA._2Npkh4._2kuvG8._7UHT_c").__reactEventHandlers$pvrhr6cl6gh;,当您在) 之后键入. 时,您应该会在Chrome 中看到它。看起来像 React.js,将你的标签更新为 React JS。
  • 这个问题有答案吗?

标签: javascript html reactjs google-chrome-extension


【解决方案1】:

我认为你必须像这样在 jQuery 中使用多类选择器:

$("._2AkmmA, ._2Npkh4, ._2kuvG8, _7UHT_c").click()

如你所见,我在课间使用, 或者像这样减少你的课程:

$("._2AkmmA").click()

【讨论】:

  • @connexo 为什么?对于第二个代码我可以同意你,但对于多类选择器我不能。
【解决方案2】:

只有在所有元素都满载时才调用代码,否则找不到。您必须将JQuery 换成这样:

$(document).ready(function(){
    $("._2AkmmA._2Npkh4._2kuvG8._7UHT_c").click();
});

【讨论】:

    【解决方案3】:

    您的代码可能在 DOM 完全加载之前运行。

    尝试使用$(document).ready(function(){... 包装您的代码,这将确保内部代码仅在页面文档对象模型 (DOM) 准备好后运行。

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <script>
      $(document).ready(function(){
        $("._2AkmmA._2Npkh4._2kuvG8._7UHT_c").click();
      });
    
      function test(){
        alert('clicked');
      }
    </script>
    
    <form><button class="_2AkmmA _2Npkh4 _2kuvG8 _7UHT_c" type="button" onclick="test()"><span class="_279WdV"></span> <!-- -->BUY NOW</button></form>

    【讨论】:

    • 任何人如何在他尝试修改和扩展的按钮上添加 onclik 功能?
    • @pixellab OP 没有提到他想以编程方式单击按钮的原因。在这种情况下,OnClick 似乎不是他的选择。
    • @Vishalchoudhary,那么你应该为这个问题创建一个活生生的例子。
    • @GiulioBambini 实际上是现场提到的例子,他想点击上面链接上的立即购买按钮。
    • @pixellab,我的意思是在 SO 中或在小提琴中说......不是在那个链接中......谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多