此博客僅爲我業餘記錄文章所用,發佈到此,僅供網友閱讀參考,如有侵權,請通知我,我會刪掉。
本文章純野生,無任何借鑑他人文章及抄襲等。堅持原創!!
前言
最近在利用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模擬點擊
這裏有兩個步驟,
- 一是
定位
到需要模擬點擊的位置
- 二是
執行Js
模擬點擊
示例:
# 步驟一
button = browser.find_element_by_xpath('xxx')
# 步驟二
driver.execute_script("arguments[0].click();",button)
1.2 執行鼠標事件模擬點擊
這裏有兩個步驟,
- 一是獲取需要
節點的座標
- 二是執行
鼠標事件
移動到指定座標進行模擬點擊。
至於節點的座標怎麼去獲取這裏就不做論述,
示例:
# 步驟二
# xoffset 和 yoffset 分別爲節點座標的 x 和 y
ActionChains(browser).move_by_offset(xoffset=x, yoffset=y).click().perform()
# 執行這一步釋放鼠標,(可選
ActionChains(browser).release()
這裏穿插一個,也是鼠標事件的模擬點擊,和上述的執行Js模擬點擊類似。
兩個步驟:
- 一是
定位
到需要模擬點擊的位置
- 二是執行
鼠標事件
模擬點擊。
示例:
# 步驟一
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
,顧名思義,包含。
所以這一個操作既可以匹配包含的部分文本,也可以匹配全部文本。
請看上圖,節點標籤並不是固定的,也有可能是span
,div
等標籤。
示例一:
# 定位到文本內容爲 投稿 的位置,然後執行點擊工作
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