【问题标题】:How can I trigger the click event on a list element?如何触发列表元素的点击事件?
【发布时间】:2020-07-19 15:30:07
【问题描述】:

在第 3 方网络应用程序中,我想使用 jQuery 自动触发对列表中元素的点击,就像物理鼠标点击一样。

该列表包含玩家数据,这些数据总是不同的,因为它就像一场拍卖。元素类的名称始终相同。

选定的名字:class="listFUTItem has-auction-data selected"

一个未被选中的元素被命名为:class="listFUTItem has-auction-data"

列表如下所示:

使用 MutationObserver,我已经编辑了一个元素的高度,如果价格低于我的数据库的平均价格,它的颜色就会像这里看到的那样添加样式:

现在我想自动选择 Elements 类匹配 '[style*="background-color"]' 的交易

我也尝试向元素添加一个选定的类,但侧面板不会对此产生任何影响。

传输列表 HTML 如下所示:

我的意思是这个事件:

这是 MutationObserver 代码,里面有 jQuery:

var observeTransferList = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
    mutation.addedNodes.forEach(function (node) {
        if (node.nodeType === 1 && node.matches(".has-auction-data")) {
            $(node).css("height", "37");
            $(node).removeClass('selected');

            chrome.storage.sync.get(function (items) {
                platform = items.platform;
                percentage = items.percentage;
                var playerData = getPlayerData(node, platform, percentage);


                $(node).append(playerData);
                if (playerData.colorPicked) {
                    $(node).css("backgroundColor", playerData.colorPicked); //can be "" by default, or green, yellow etc
                    //$(node).css("height", "37");
                    var price = Math.trunc(
                        parseInt(playerData.binValue.replace(/,/g, "")) / 0.949
                    );
                }


   // -------- CODE HERE -----------//
                if (node.matches('[style*="background-color"]')) { //works
                    $(node).css("height", "60"); //works
                    $(node).addClass('selected')//works
                    //$(node).click('selected'); // not working
                    //$(node).click(); // not working 
                   //$(node).trigger('click'); //notworking
                   //$(node).trigger('click', ['selected']); // not working even when adding a selected class after page load and remove old selected

                }

我尝试了类似的解决方案:

Difference between .click() and actually clicking a button? (javascript/jQuery)

Trigger a click event on an inner element

executing a click function without the user clicking?

不知何故,我需要触发改变侧面板的 listelement 事件。不知何故,虚拟点击必须触发绑定到真实鼠标点击的事件。但是我错过了什么?

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    每个鼠标事件都带有属性isTrusted。如果事件是由element.click() 方法生成的,则此属性设置为 false。因此,您正在谈论的网站可以实施一项检查,以防止 javascript 浏览器自动化(.click() 方法)。

    我遇到了和你类似的问题,我找到的唯一解决方案是使用 python-browser-automatization Selenuim for python。 Selenium 带有 chrome 驱动程序(模拟整个 chrome 浏览器),它提供了 cookie、所有的 javascript API,对你来说最重要的是,它可以生成带有 isTrusted 属性的 MouseEvents。

    【讨论】:

    • WebApp 上的每次编辑都是由 Chrome 扩展程序进行的。老实说,我不愿意为了运行实例而将所有内容重写为 python 或 java。也许 AutoPixelSelector 是最简单的方法
    猜你喜欢
    • 2011-12-21
    • 2012-12-07
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多