欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用execute_script模擬鼠標(biāo)滾動(dòng)、鼠標(biāo)點(diǎn)擊等示例

 更新時(shí)間:2025年02月02日 16:05:51   作者:翠花上酸菜  
文章介紹了Python使用Selenium執(zhí)行JavaScript來繞過網(wǎng)站對爬蟲的限制,包括模擬點(diǎn)擊、攔截彈出窗口、創(chuàng)建并派發(fā)點(diǎn)擊事件、模擬鼠標(biāo)懸停后點(diǎn)擊和滾動(dòng)到元素并點(diǎn)擊等方法

我們在寫selenium獲取網(wǎng)絡(luò)信息的時(shí)候,有時(shí)候我們會(huì)受到對方瀏覽器js的監(jiān)控,對方通過分析用戶行為模式,如點(diǎn)擊、滾動(dòng)、停留時(shí)間等,網(wǎng)站可以識(shí)別出異常行為,進(jìn)而對Selenium爬蟲進(jìn)行限制。

這里我們可以加入JavaScript的使用。Selenium可以執(zhí)行JavaScript,通過使用 execute_script 方法,來執(zhí)行點(diǎn)擊操作。

它可以繞過一些 Selenium 直接操作元素時(shí)可能遇到的問題,比如元素未完全加載、元素被遮擋或者需要更復(fù)雜的交互。

以下是幾種使用 execute_script 來執(zhí)行點(diǎn)擊操作的方法:

1. 模擬鼠標(biāo)直接點(diǎn)擊事件

element = driver.find_element_by_id("myButton")
driver.execute_script("arguments[0].click();", element)

這段代碼找到 ID 為 myButton 的元素,并使用 JavaScript 直接觸發(fā)該元素的點(diǎn)擊事件。

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,以模擬用戶點(diǎn)擊“確定”按鈕
};
window.prompt = function() {
    console.log("Prompt function called, but blocked.");
    return null; // 返回null,以模擬用戶點(diǎn)擊“取消”按鈕
};''')

以上的代碼,所有調(diào)用alert、confirm和prompt的方法將被攔截,且不會(huì)彈出任何窗口。這種方法簡單而有效,適用于大多數(shù)情況。

3. 創(chuàng)建并派發(fā)點(diǎn)擊事件

這種方法創(chuàng)建一個(gè)新的點(diǎn)擊事件,并將其派發(fā)到指定的元素上,這可以提供更多的控制,比如模擬鼠標(biāo)右鍵點(diǎn)擊。

element = driver.find_element("myButton")
driver.execute_script("var event = new MouseEvent('click', {"
                     "view: window,"
                     "bubbles: true,"
                     "cancelable: true});"
                     "arguments[0].dispatchEvent(event);", element)

在運(yùn)行過程中,如果遇到下面的問題:

“JavascriptException: javascript error: arguments[0].dispatchEvent is not a function”

這說明,

4. 使用 JavaScript 模擬鼠標(biāo)懸停后點(diǎn)擊

如果你需要更復(fù)雜的鼠標(biāo)操作,比如鼠標(biāo)懸停后點(diǎn)擊,你可以使用以下方法:

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. 滾動(dòng)到元素并點(diǎn)擊

如果元素不在可視區(qū)域內(nèi),你可能需要先滾動(dòng)到該元素,然后再執(zhí)行點(diǎn)擊操作:

element = driver.find_element_by_id("myButton")
driver.execute_script("arguments[0].scrollIntoView();", element)
driver.execute_script("arguments[0].click();", element)

6. 等待元素可點(diǎn)擊后執(zhí)行點(diǎn)擊

有時(shí)候,元素可能需要一些時(shí)間來加載或變得可點(diǎn)擊,你可以使用 execute_script 來等待這個(gè)條件:

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í)行點(diǎn)擊操作的示例。

你可以根據(jù)實(shí)際情況選擇最適合你需求的方法。

到此這篇關(guān)于Python使用execute_script模擬鼠標(biāo)滾動(dòng)、鼠標(biāo)點(diǎn)擊等示例的文章就介紹到這了,更多相關(guān)Python使用js模擬鼠標(biāo)點(diǎn)擊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python爬蟲框架scrapy代理中間件掌握學(xué)習(xí)教程

    python爬蟲框架scrapy代理中間件掌握學(xué)習(xí)教程

    這篇文章主要介紹了python爬蟲框架scrapy代理中間件掌握學(xué)習(xí)教程,為大家說明一下 scrapy 中代理相關(guān)知識(shí)點(diǎn),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Python作用域與名字空間源碼學(xué)習(xí)筆記

    Python作用域與名字空間源碼學(xué)習(xí)筆記

    這篇文章主要為大家介紹了Python作用域與名字空間的源碼學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2022-05-05
  • 使用Python實(shí)現(xiàn)炫酷的數(shù)據(jù)動(dòng)態(tài)圖大全

    使用Python實(shí)現(xiàn)炫酷的數(shù)據(jù)動(dòng)態(tài)圖大全

    數(shù)據(jù)可視化是通過圖形、圖表、地圖等可視元素將數(shù)據(jù)呈現(xiàn)出來,以便更容易理解、分析和解釋,它是將抽象的數(shù)據(jù)轉(zhuǎn)化為直觀形象的過程,本文給大家介紹了使用Python實(shí)現(xiàn)炫酷的數(shù)據(jù)動(dòng)態(tài)圖大全,需要的朋友可以參考下
    2024-06-06
  • Python Pygame實(shí)現(xiàn)兔子獵人守護(hù)城堡游戲

    Python Pygame實(shí)現(xiàn)兔子獵人守護(hù)城堡游戲

    這篇文章主要介紹了用python來制作的一個(gè)守護(hù)類小游戲兔子獵人守護(hù)城堡,文中的示例代碼介紹得很詳細(xì),感興趣的小伙伴快來跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • python中g(shù)lobal與nonlocal比較

    python中g(shù)lobal與nonlocal比較

    這篇文章主要介紹了python中g(shù)lobal與nonlocal比較,global關(guān)鍵字用來在函數(shù)或其他局部作用域中使用全局變量,nonlocal關(guān)鍵字用來在函數(shù)或其他作用域中使用外層(非全局)變量,需要的朋友可以參考下
    2014-11-11
  • 10分鐘用Python快速搭建全文搜索引擎詳解流程

    10分鐘用Python快速搭建全文搜索引擎詳解流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章帶你用python花10分鐘迅速搭建一個(gè)好玩的Python全文搜索引擎,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-10-10
  • Python 中將值附加到集合的操作方法

    Python 中將值附加到集合的操作方法

    這篇文章主要介紹了Python 中將值附加到集合的操作方法,通過使用 add() 方法或 update() 方法,你可以向 Python 中的集合中添加元素,在添加元素時(shí),需要注意不允許重復(fù)元素和集合是無序的,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Python實(shí)現(xiàn)為圖片批量添加隨機(jī)水印

    Python實(shí)現(xiàn)為圖片批量添加隨機(jī)水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)為圖片批量添加隨機(jī)水印,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • Python裝飾器類方法擴(kuò)展元類管理實(shí)例探究

    Python裝飾器類方法擴(kuò)展元類管理實(shí)例探究

    這篇文章主要為大家介紹了Python裝飾器類方法擴(kuò)展元類管理實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • python3使用SMTP發(fā)送HTML格式郵件

    python3使用SMTP發(fā)送HTML格式郵件

    這篇文章主要為大家詳細(xì)介紹了python3使用SMTP發(fā)送HTML格式的郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評論