[英]How can I click on a button when it becomes visible in Gmail?
我寫了一個 Tampermonkey 腳本,當編輯器窗口打開時自動點擊 gmail 的小箭頭“發送為” 。
有兩件事似乎不起作用:
observer.disconnect();
但這無濟於事。.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.