我正在嘗試解決自動(dòng)登錄到https://account.booking.com/sign-in的腳本中的錯(cuò)誤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);大多數(shù)情況下,這工作正常。盡管 Chrome 會(huì)自動(dòng)填寫用戶名字段,但它有時(shí)會(huì)顯示登錄名錯(cuò)誤,出于我們的目的,我們可以安全地忽略它——但是,這有時(shí)會(huì)導(dǎo)致頁面出于某種原因?qū)δ_本無響應(yīng)。用戶在頁面上所做的幾乎任何事情都會(huì)導(dǎo)致腳本繼續(xù)運(yùn)行——按 F12 打開 Dom 檢查器,點(diǎn)擊頁面上的任何地方,甚至在控制臺(tái)上運(yùn)行命令(就像“ a = document.querySelector...”一樣簡(jiǎn)單)都會(huì)以某種方式踢腳本正常運(yùn)行。我試圖按照以前的答案,實(shí)現(xiàn)triggerMouseEvent并運(yùn)行鼠標(biāo)懸停、鼠標(biāo)按下、鼠標(biāo)按下和點(diǎn)擊。這與簡(jiǎn)單地使用click(). 由于單擊頁面上的其他地方可以修復(fù)它,因此我嘗試在其他元素上使用此類單擊事件,然后再在按鈕上使用它們;這也與簡(jiǎn)單地使用click(). 我所看到的 Tampermonkey 腳本“在...之后工作”的唯一結(jié)果是頁面重新加載的 AJAX 問題,而不是用戶與窗口的交互。放置console.log("click")在點(diǎn)擊事件之后表明它到達(dá)點(diǎn)擊事件就好了。使用triggerMouseEvent,我記錄dispatchEvent如下:function triggerMouseEvent (node, eventType) { var clickEvent = document.createEvent ('MouseEvents'); clickEvent.initEvent (eventType, true, true); console.log(node.dispatchEvent (clickEvent));}它true按預(yù)期返回“ ”。我試圖在每次點(diǎn)擊之間發(fā)送一個(gè)鍵盤事件,如下所示: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);}這也沒有奏效。對(duì)于導(dǎo)致問題的原因以及可以采取哪些措施來解決問題,我完全沒有想法。這是加載頁面后在控制臺(tái)上顯示的內(nèi)容(如果可能相關(guān)):[僅報(bào)告] 拒絕執(zhí)行內(nèi)聯(lián)事件處理程序,因?yàn)樗`反了以下內(nèi)容安全策略指令:“script-src saa.booking.com *.bstatic.com bstatic.com google-analytics.com 'self' 'nonce-6B8EKlfK9vqB8Uy' ”。啟用內(nèi)聯(lián)執(zhí)行需要“unsafe-inline”關(guān)鍵字、哈希(“sha256-...”)或隨機(jī)數(shù)(“nonce-...”)。content_script @ VM1347:61(匿名)@ VM1347:71
Tampermonkey 腳本點(diǎn)擊事件在用戶與窗口交互之前什么都不做
函數(shù)式編程
2021-06-16 17:12:54