Python使用execute_script模擬鼠標滾動、鼠標點擊等示例
我們在寫selenium獲取網(wǎng)絡信息的時候,有時候我們會受到對方瀏覽器js的監(jiān)控,對方通過分析用戶行為模式,如點擊、滾動、停留時間等,網(wǎng)站可以識別出異常行為,進而對Selenium爬蟲進行限制。
這里我們可以加入JavaScript的使用。Selenium可以執(zhí)行JavaScript,通過使用 execute_script
方法,來執(zhí)行點擊操作。
它可以繞過一些 Selenium 直接操作元素時可能遇到的問題,比如元素未完全加載、元素被遮擋或者需要更復雜的交互。
以下是幾種使用 execute_script
來執(zhí)行點擊操作的方法:
1. 模擬鼠標直接點擊事件
element = driver.find_element_by_id("myButton") driver.execute_script("arguments[0].click();", element)
這段代碼找到 ID 為 myButton
的元素,并使用 JavaScript 直接觸發(fā)該元素的點擊事件。
2. 攔截彈出窗口
通過覆蓋瀏覽器內(nèi)置的方法,如alert、confirm、prompt等,避免彈出窗口
driver.execute_script('''window.alert = function() { console.log("Alert function called, but blocked."); }; window.confirm = function() { console.log("Confirm function called, but blocked."); return true; // 返回true,以模擬用戶點擊“確定”按鈕 }; window.prompt = function() { console.log("Prompt function called, but blocked."); return null; // 返回null,以模擬用戶點擊“取消”按鈕 };''')
以上的代碼,所有調(diào)用alert、confirm和prompt的方法將被攔截,且不會彈出任何窗口。這種方法簡單而有效,適用于大多數(shù)情況。
3. 創(chuàng)建并派發(fā)點擊事件
這種方法創(chuàng)建一個新的點擊事件,并將其派發(fā)到指定的元素上,這可以提供更多的控制,比如模擬鼠標右鍵點擊。
element = driver.find_element("myButton") driver.execute_script("var event = new MouseEvent('click', {" "view: window," "bubbles: true," "cancelable: true});" "arguments[0].dispatchEvent(event);", element)
在運行過程中,如果遇到下面的問題:
“JavascriptException: javascript error: arguments[0].dispatchEvent is not a function”
這說明,
4. 使用 JavaScript 模擬鼠標懸停后點擊
如果你需要更復雜的鼠標操作,比如鼠標懸停后點擊,你可以使用以下方法:
element = driver.find_element_by_id("myButton") driver.execute_script("arguments[0].style.cursor = 'pointer';", element) driver.execute_script("arguments[0].onmouseover = function() {" "arguments[0].style.backgroundColor = 'yellow'; };", element) driver.execute_script("arguments[0].onmouseout = function() {" "arguments[0].style.backgroundColor = 'white'; };", element) driver.execute_script("arguments[0].click();", element)
5. 滾動到元素并點擊
如果元素不在可視區(qū)域內(nèi),你可能需要先滾動到該元素,然后再執(zhí)行點擊操作:
element = driver.find_element_by_id("myButton") driver.execute_script("arguments[0].scrollIntoView();", element) driver.execute_script("arguments[0].click();", element)
6. 等待元素可點擊后執(zhí)行點擊
有時候,元素可能需要一些時間來加載或變得可點擊,你可以使用 execute_script
來等待這個條件:
element = driver.find_element_by_id("myButton") driver.execute_script("while (arguments[0].disabled || " "arguments[0].style.display === 'none' || " "arguments[0].style.visibility === 'hidden') {" "setTimeout(function() {}, 100); };" "arguments[0].click();", element)
這些方法提供了不同場景下使用 execute_script
執(zhí)行點擊操作的示例。
你可以根據(jù)實際情況選擇最適合你需求的方法。
到此這篇關(guān)于Python使用execute_script模擬鼠標滾動、鼠標點擊等示例的文章就介紹到這了,更多相關(guān)Python使用js模擬鼠標點擊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python實現(xiàn)炫酷的數(shù)據(jù)動態(tài)圖大全
數(shù)據(jù)可視化是通過圖形、圖表、地圖等可視元素將數(shù)據(jù)呈現(xiàn)出來,以便更容易理解、分析和解釋,它是將抽象的數(shù)據(jù)轉(zhuǎn)化為直觀形象的過程,本文給大家介紹了使用Python實現(xiàn)炫酷的數(shù)據(jù)動態(tài)圖大全,需要的朋友可以參考下2024-06-06Python Pygame實現(xiàn)兔子獵人守護城堡游戲
這篇文章主要介紹了用python來制作的一個守護類小游戲兔子獵人守護城堡,文中的示例代碼介紹得很詳細,感興趣的小伙伴快來跟隨小編一起學習學習吧2021-12-12