我正在嘗試解決自動登錄到https://account.booking.com/sign-in的腳本中的錯誤function clickButton (){ const msg = document.querySelector(".bui-form__error"); const button = document.querySelector(".bui-button"); if (msg && msg.id !== "loginname-error" ) { console.log(msg.textContent); } else if (button) { button.click(); } else { console.log("Not yet..."); return; }}setInterval(clickButton, 200);大多數情況下,這工作正常。盡管 Chrome 會自動填寫用戶名字段,但它有時會顯示登錄名錯誤,出于我們的目的,我們可以安全地忽略它——但是,這有時會導致頁面出于某種原因對腳本無響應。用戶在頁面上所做的幾乎任何事情都會導致腳本繼續運行——按 F12 打開 Dom 檢查器,點擊頁面上的任何地方,甚至在控制臺上運行命令(就像“ a = document.querySelector...”一樣簡單)都會以某種方式踢腳本正常運行。我試圖按照以前的答案,實現triggerMouseEvent并運行鼠標懸停、鼠標按下、鼠標按下和點擊。這與簡單地使用click(). 由于單擊頁面上的其他地方可以修復它,因此我嘗試在其他元素上使用此類單擊事件,然后再在按鈕上使用它們;這也與簡單地使用click(). 我所看到的 Tampermonkey 腳本“在...之后工作”的唯一結果是頁面重新加載的 AJAX 問題,而不是用戶與窗口的交互。放置console.log("click")在點擊事件之后表明它到達點擊事件就好了。使用triggerMouseEvent,我記錄dispatchEvent如下:function triggerMouseEvent (node, eventType) { var clickEvent = document.createEvent ('MouseEvents'); clickEvent.initEvent (eventType, true, true); console.log(node.dispatchEvent (clickEvent));}它true按預期返回“ ”。我試圖在每次點擊之間發送一個鍵盤事件,如下所示:function pressf12(){ var event = new KeyboardEvent("pressF12"); event.keyCode = 123; event.which = 123; event.altKey = false; event.ctrlKey = false; event.shiftKey= false; event.target = window; window.dispatchEvent(event);}這也沒有奏效。對于導致問題的原因以及可以采取哪些措施來解決問題,我完全沒有想法。這是加載頁面后在控制臺上顯示的內容(如果可能相關):[僅報告] 拒絕執行內聯事件處理程序,因為它違反了以下內容安全策略指令:“script-src saa.booking.com *.bstatic.com bstatic.com google-analytics.com 'self' 'nonce-6B8EKlfK9vqB8Uy' ”。啟用內聯執行需要“unsafe-inline”關鍵字、哈希(“sha256-...”)或隨機數(“nonce-...”)。content_script @ VM1347:61(匿名)@ VM1347:71
Tampermonkey 腳本點擊事件在用戶與窗口交互之前什么都不做
函數式編程
2021-06-16 17:12:54