【Selenium疑難雜症】無法模擬定位點擊 -- 已解決

此博客僅爲我業餘記錄文章所用,發佈到此,僅供網友閱讀參考,如有侵權,請通知我,我會刪掉。
本文章純野生,無任何借鑑他人文章及抄襲等。堅持原創!!

前言

最近在利用Selenium做一些在瀏覽器上的自動化操作時候,遇到了個別無法使用常規方法處理的難題,所幸,最後也是成功解決該些問題。在這裏將它記錄下來,方便與日後回看,也希望能夠幫助到其他需要的小夥伴們。


Python + Selenium爬蟲視頻教程:https://www.bilibili.com/video/BV1Ka4y1i7Pz

首先執行以下代碼,

from selenium import webdriver
from selenium.webdriver import ActionChains
# 實例化一個瀏覽器對象
browser = webdriver.Chrome()

有一個需要注意的地方就是,文中我用的定位方法幾乎都是find_element_by_xpath,無他,惟手熟爾。
小夥伴們可以使用自己熟悉的節點定位方式哈


1. 解決無法模擬鼠標點擊(三種解決方法

一般來說,利用Selenium執行鼠標點擊的時候,只需要定位到需要點擊的節點,然後再執行click()即可。

示例:

browser.find_element_by_xpath('xxx').click()

但咱們這篇文章要講的是使用常規方法不能解決的模擬鼠標點擊,還請往下看。

1.1 執行Js模擬點擊

這裏有兩個步驟,

  1. 一是定位到需要模擬點擊的位置
  2. 二是執行Js模擬點擊

示例:

# 步驟一
button = browser.find_element_by_xpath('xxx')

# 步驟二
driver.execute_script("arguments[0].click();",button) 

1.2 執行鼠標事件模擬點擊

這裏有兩個步驟,

  1. 一是獲取需要節點的座標
  2. 二是執行鼠標事件移動到指定座標進行模擬點擊。

至於節點的座標怎麼去獲取這裏就不做論述,
示例:

# 步驟二
# xoffset 和 yoffset 分別爲節點座標的 x 和 y
ActionChains(browser).move_by_offset(xoffset=x, yoffset=y).click().perform()
# 執行這一步釋放鼠標,(可選
ActionChains(browser).release()

這裏穿插一個,也是鼠標事件的模擬點擊,和上述的執行Js模擬點擊類似。
兩個步驟:

  1. 一是定位到需要模擬點擊的位置
  2. 二是執行鼠標事件模擬點擊。

示例:

# 步驟一
button = browser.find_element_by_xpath('xxx')
# 步驟二
ActionChains(browser).click(button).perform()

1.3 定位到文本text模擬點擊(可選。

若是需要點擊的地方有文本內容,那就更好了,

如:find_element_by_xpath('//a[contains(text), "投稿"]').click(),即可匹配節點標籤爲a並且文本內容爲 投稿 的節點然後再點擊。

contains,顧名思義,包含。
所以這一個操作既可以匹配包含的部分文本,也可以匹配全部文本。


SunriseCai

請看上圖,節點標籤並不是固定的,也有可能是spandiv等標籤。


示例一:

# 定位到文本內容爲 投稿 的位置,然後執行點擊工作
browser.find_element_by_xpath('//span[contains(text(), "投稿")').click()
# 定位到文本內容爲 投稿 並且它的class標籤爲 n-text 的位置,然後執行點擊工作
browser.find_element_by_xpath('//span[contains(text(), "投稿") and @class="n-text"]').click()

示例二:

# 定位到文本內容爲 自如租房 的位置,然後執行點擊工作
browser.find_element_by_xpath('//a[contains(text(), "自如租房")]').click()
# 定位到文本內容爲 自如租房 並且它的class標籤爲 title 的位置,然後執行點擊工作
browser.find_element_by_xpath('//a[contains(text(), "自如租房") and @class="title"]').click()

後話

好了,本次的分享到這裏就結束了。

有任何疑問歡迎一起交流,還請各位不吝指正。

也歡迎加入QQ羣組織一起交流:648696280

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章