簡體   English   中英

當按鈕在 Gmail 中可見時,如何單擊它?

[英]How can I click on a button when it becomes visible in Gmail?

我寫了一個 Tampermonkey 腳本,當編輯器窗口打開時自動點擊 gmail 的小箭頭“發送為”

“發送為”箭頭

有兩件事似乎不起作用:

  1. 觀察者只會解決承諾一次(所以看起來這只會工作一次,這是第一次打開作曲家窗口)。 我試圖刪除observer.disconnect(); 但這無濟於事。
  2. .click()本身不工作(甚至在調用element.click()時從常規 Chrome 控制台也不工作)。

有沒有辦法使這項工作?

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  some script
// @author       You
// @match        http*://mail.google.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant        none
// ==/UserScript==

(function() {
    async function waitForElement(selector) {
        return new Promise(resolve => {
            if (document.querySelector(selector)) {
                return resolve(document.querySelector(selector));
            }

            const observer = new MutationObserver(mutations => {
                if (document.querySelector(selector)) {
                    resolve(document.querySelector(selector));
                    observer.disconnect();
                }
            });

            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
        });
    }

    waitForElement('.nH.Hd[role=dialog]').then(button => {
        console.log('Compose window is open');
        console.log(button.querySelector('.J-J5-Ji.J-JN-M-I-JG'));

        const downEvt = new MouseEvent("mousedown");
        button.dispatchEvent(downEvt);
    })
})();

請考慮使選擇器更穩定——您使用的選擇器必然會發生變化。

下面的腳本使用了waitForKeyElements ,這是一個由Brock Adams開發的實用程序。 第三個參數 ( false ) 繼續搜索新元素,即使在找到第一個元素之后也是如此。

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  some script
// @author       You
// @match        http*://mail.google.com/*
// @require      https://gist.githubusercontent.com/BrockA/2625891/raw/waitForKeyElements.js
// @require      https://code.jquery.com/jquery-3.6.3.min.js
// @grant        none
// ==/UserScript==
/* globals waitForKeyElements */

(function() {
    waitForKeyElements('.nH.Hd[role=dialog] .J-J5-Ji.J-JN-M-I-JG', element => {
        const downEvt = new MouseEvent("mousedown");
        const parent = element[0].parentElement;

        // for stability
        if (!parent.innerText.includes("one of your emails")) return;

        parent.dispatchEvent(downEvt);
    }, false);
})();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM