1. 程式人生 > >selenium自動化實戰-基於python語言(二: 編寫腳本)

selenium自動化實戰-基於python語言(二: 編寫腳本)

獲取 pat 打開 border 命令 需要 框架 attribute 一個

上一篇文章說到顯示等待和隱式等待語句,我們繼續學習下面的命令方法。

8. 定位一組元素

這裏書上是自己寫了一個頁面代碼,通過訪問本地這個頁面來舉例。但我覺得找一個現有的頁面自己琢磨更有意思,而且復雜的頁面也會遇到復雜的問題。比如我根據163郵箱登錄頁面的 “十天內免登錄” 復選框寫了如下的代碼:

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get(‘http://mail.163.com/‘)
driver.implicitly_wait(20) #這裏加一個隱式等待命令,等待頁面加載,不然可能會報錯


driver.switch_to_frame(‘x-URS-iframe‘) #163郵箱登錄頁面的復選框在一個框架內,所以需要定位到該框架內

#選擇頁面上所有的tag name 為input的元素
inputs = driver.find_elements_by_tag_name(‘input‘) #一定要註意定位一組元素需要是 elements, 而不是element


#通過for循環找出type為checkbox的元素並且單擊勾選
for i in inputs:
if i.get_attribute(‘type‘) == ‘checkbox‘:
i.click()
time.sleep(1)


print(len(inputs)) #這裏結果打印出來是9,所以在這個框架內復選框的個數應該是9,但是比較直觀的我們只能看到“十天內免登錄”

#driver.quit()

上面這段代碼會勾選 “十天內免登錄” 復選框,其實如果單純實現這個行為有更簡單的方法,但是這裏只是為了理解定位一組元素的方法。下面介紹 pop() 方法:

獲取一組元素中最後一個 pop() 或者 pop(-1) 例如: driver.find_element_by_id(‘xx‘).pop().click()
獲取一組元素中的第一個 pop(0)
獲取一組元素中的第二個 pop(1)

9. 多表單切換

  • 嵌套的iframe有 id 或 name: switch_to_frame(‘‘) 裏面填寫 id 或者 name。 這裏書裏寫的是: switch_to.frame(),這兩個方法我都試過了,全都是正確的。但還是建議用規範的寫法:switch_to.frame()
  • 嵌套的iframe 沒有 id 或 name:

.......

xf = driver. find_element_by_xpath(‘//*[@class="if"]‘)

driver.switch_to_frame(xf)

driver.switch_to.parent_frame() # 默認跳出離它最近的switch_to.frame() 方法

driver.switch_to.default_content() # 跳回最外層的頁面

10. 多窗口切換

獲得當前窗口句柄 current_window_handle 例如: search_window = driver.current_window_handle
返回所有打開的窗口的句柄到當前會話 window_handles 例如: all_handles = driver.window_handles
切換到相應的窗口 switch_to.window() 例如: driver.switch_to.window(search_window)

selenium自動化實戰-基於python語言(二: 編寫腳本)