【问题标题】:How To Trigger Button Click On A Web That Uses History API HTML5 Using JavaScript?如何使用 JavaScript 在使用 History API HTML5 的 Web 上触发按钮单击?
【发布时间】:2020-02-19 23:08:11
【问题描述】:

我正在开发一个自动点击的 Chrome 扩展程序。我的扩展适用于多页应用程序。它可以点击网站上的按钮。但我对这个作为单页应用程序的特定网站有疑问。

我的扩展程序无法使用此 JavaScript 触发按钮点击

function clickButton(){
var submit =  document.getElementsByClassName(".class");
submit.click();
}

我的问题是,如何触发单页应用程序的按钮点击?因为似乎使用 .click() 不起作用

更多信息

我的扩展程序的工作方式是单击搜索按钮,它会显示结果。如果有结果,我会做具体的事情。但如果结果为空,我会返回上一页(搜索页面),然后再次点击搜索按钮。而且我的扩展程序无法单击搜索按钮或后退按钮。我的假设是,当我使用 .click() 单击按钮时,网络不会请求显示特定的 HTML 页面。我错了吗?

关于本网站的其他信息

所以这个网站是一个单页应用程序。在我登录这个网站后,它把我带到https://sample.com/page1 - 这是一个家。然后我转到搜索页面(URL 仍然相同,但显示的布局不同,即搜索页面)。在搜索页面,我输入搜索参数,然后点击搜索按钮(网址还是一样,但显示的布局不同,即搜索结果)。所以我猜这些网络的工作方式是每次我点击某个页面时,它都会使用 history.pushState 请求页面布局 - 我猜。所以我想知道是否有办法操纵这个history.pushState?例如,我可以直接转到所需页面,而不是单击后退按钮吗?

【问题讨论】:

  • 不看网站代码很难回答,但即使在您提供的 3 行代码中也至少存在 2 个问题: 1、getElementsByClassName 返回一个类似数组的对象,其中 .click() 获胜不行。 2,getElementsByClassName 需要一个类名(不带 .),您似乎使用选择器(带 .)developer.mozilla.org/en-US/docs/Web/API/Document/… 调用它
  • 你可以试试this approach
  • 我试过了。但同样的结果。它不会点击按钮。我猜,为了防止任何自动化工具,这个网站不允许任何来自任何功能的点击点击标签。

标签: javascript google-chrome google-chrome-extension chromium html5-history


【解决方案1】:

document.getElementsByClassName(".class") 返回一个数组,所以 array.onclick() 不起作用。

要触发html事件,不能只点击:

function trigger(elm, type) {
  if (elm) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent(type, true, true);
    elm.dispatchEvent(evt);
  }
}

在你的情况下,我认为你想要:

trigger(document.querySelector('.class'), 'click')

【讨论】:

  • 我想我已经尝试过类似的代码pastebin.com/VvmK5UXr 我什至为 X 和 Y 位置添加了第三个参数。但是仍然无法单击该按钮。仅供参考,我还尝试使用 iMacros 单击搜索按钮。该按钮已被点击,但它本应在结果页面上时仍在搜索页面上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多