程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python selenium ActionChains 庫(模擬鼠標懸浮)和 Select 庫(分級菜單選擇)的應用實踐

編輯:Python

selenium 是浏覽器自動化測試框架,可以控制浏覽器,模仿人浏覽,操作網頁,從而獲取數據,自動操作等。

以下3個實踐視頻 : https://weibo.com/2203755810

1. 百度的應用 :

#1:
selenium登陸百度主頁,暫停下一步程序運行,加入sleep(), 目的為了主頁完成完整的加載,這裡設置為 3。


#2:
在主頁面有一個 ”設置“的選項,當鼠標點在”設置“上,會彈出它的分級菜單, 如下圖1 。

打開 HTML 源代碼,發現 "設置”是寫在一個 非自閉合的 span label 裡,而其它的分級菜單, 嵌套在 一個 div 的塊區域 label 裡,每個分級菜單,是一個獨立的帶超鏈接的 a label , 如下圖2

因此在這個分級菜單,如果要定位相關的元素,只能用定位的方法,不可以用 Select 庫的方法(下面的 Select 庫例子會提到),否則會出現 如下圖3 的報錯。

先通過 ActionChains 的 move 方法,移到“設置” 所定位的位置選項上,然後再定位“高級搜索”,最後用 ActionChains的 click 方法實現選擇“高級搜索”,彈出 如下圖4 的對話框,最後設置 sleep(), 隨便設置為3。

ActionChians的方法還有好多,具體可以通過官方簡書查看說明,或者通過它的庫幫助提示去看看,如下圖5,具體彈出方法有兩種, 一種是 按著 “Ctrl” 然後鼠標移到 庫名上,會自動變成一個帶手指的超鏈接,另外一種是,把庫名 highlight 後,會彈出幫助提示的超鏈接,如下圖6


#3:
在 “高級搜索裡”,先定位 “包含全部關鍵詞”,如下圖7,然後 通過 send_keys() 方法,輸入所需要搜索的內容。

然後再定位 “全部時間”,如下圖8,再通過 click()方法打開下拉的分級菜單。例如要選擇 “最近一周”,先定位這一選項的位置。
根據Element 的 顯示,每個分選項都是一個獨立的 p label, 而且都帶有相同的 屬性名class 和屬性值 c-select-item。 如下圖9

同時,也看到 這些的 p label 都是嵌套在 class= c-select-dropdown-list 的 div label 下。如果要定位 “最近一周”, 有兩種方法。

(1) 先定位 class= c-select-dropdown-list 的 div label,然後通過循環,用 index 的方法,篩選出 " 最近一周” 的 label

(2) 另外一種,就是通過 CSS 選擇器,直接一步定位,如下面代碼。

定位了“最近一周”後,通過 click()方法,點擊選擇後,設置 sleep(), 隨便設置為3,暫緩下一步程序。


#4:
定位“ 高級搜索” (也就是 submit ),然後 click() 點擊,最後新建新的搜索結果頁面,如下圖10

注: ActionChians 方法,最後切記要 添加 perform() 方法去執行


圖1



圖2



圖3



圖4



圖5


圖6


圖7


圖8



圖9



圖10

from selenium import webdriver
from selenium.webdriver import ActionChains
import time

#1
browser = webdriver.Chrome()
browser.get(‘https://www.baidu.com’)
time.sleep(3)


#2
ActionChains(browser).move_to_element(browser.find_element_by_id(‘s-usersetting-top’)).perform()


ActionChains(browser).click(browser.find_element_by_link_text(‘高級搜索’)).perform()
time.sleep(3)


#3

adv_input = browser.find_element_by_id(‘adv_keyword’)
adv_input.send_keys(‘testing’)

time_zone = browser.find_element_by_class_name(‘c-select-selected-value’)

time_zone.click()
time.sleep(3)

last_week = browser.find_element_by_css_selector(’#adv-setting-gpc > div > div.c-select-dropdown > div.c-select-dropdown-list > p:nth-child(3)’)

last_week.click()
time.sleep(3)


#4

adv_search = browser.find_element_by_class_name(‘advanced-search-btn’)

adv_search.click()



2.新浪的應用 :


#1:
selenium登陸新浪首頁,同樣加入 sleep() 讓網頁有足夠的時間去加載完整。


#2:
網頁上,分別有 “圖片”,“專欄”,“熱點” 3個板塊

其中如果用鼠標點去 “圖片”和 “專欄”位置,會有另外一個頁面彈出, 但點去“熱點" 卻沒有。因為根據Element結構,“圖片”,“專欄"都有相關的 href 超鏈接的 a label ,熱點卻只有 span label, 所以點去”熱點”,沒有發生自動跳轉去另外一個頁面, 如下圖1

直接用 CSS 選擇器,給“ 熱點”定位,然後用 ActioanChians 的 move() 方法,移動定位的位置。


#3:
例如選擇“熱點”下的第2張圖片,直接用CSS 選擇器先把這圖片定位, 如下圖2, 最後用 ActionChains 的 click() 方法實現打開圖片的超鏈接。


圖1



圖2

from selenium import webdriver
from selenium.webdriver import ActionChains
import time


#1

browser = webdriver.Chrome()
browser.get(‘https://www.sina.com.cn’)
time.sleep(3)


#2

ActionChains(browser).move_to_element(browser.find_element_by_css_selector(‘body > div.main > div.part-a.clearfix > div.part-a-m > div.mod-04.uni-blk > div.uni-blk-t.clearfix > div > div > span:nth-child(3)’)).perform()


#3

ActionChains(browser).click(browser.find_element_by_css_selector(’#fc_B_hot > div > a:nth-child(2)’)).perform()

注: ActionChians 方法,最後切記要 添加 perform() 方法去執行


3. Select庫,下拉分級菜單鼠標懸浮應用


#1:
登陸相關主頁,以 http://www.edu0574.com/nbuckcj.asp為例,加入 sleep() 讓網頁有足夠的時間去加載完整。


#2:
“考試年月” 有一個下拉的分級菜單項,首先對它定位。
根據 Element 結構,看到 它是一個 select label, 每個分選項都是一個獨立的 option label, 而且帶有 value 屬性值,都是嵌套在 select label裡, 如下圖1


#3:
最後用 Select庫的 select_by_value()方法,去選擇所需要的項,例如 2019 。

Select 庫裡,還有其它的方法,例如 by_index() by_visible_text 等等,具體查找方法,如上面 ActionChains 庫查找方法一樣。

Select庫適用於大多數有下拉的分級菜單,但具體要看 Element 結構,不一定所有都可以的,以 新浪為例

在新浪的首頁,有一個“新聞”的 下拉菜單,在 Element 結構裡,這個element 同樣是 建立在一個 select label, 分級菜單的每一個選項,也是一個獨立的 option label, 而且有 value 屬性值,但由於在 select label 裡,有一個非可視設置,style=“display: none;” 如下圖2,,導致如果用 Select 庫時,會出現報錯 : element not interactable : Element is not currently visible and may not be manipulated, 大概意思就是 selenium 檢測到所定位的 element 設置了非可視屬性, 如下圖3


圖1


圖2


圖3

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time

#1:
browser = webdriver.Chrome()
browser.get(‘http://www.edu0574.com/nbuckcj.asp’)
time.sleep(2)


#2:
option = browser.find_element_by_name(‘kspc’)


#3:
Select(option).select_by_value(‘2019’)


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved