標籤:百度 print selenium 指令碼 rom inf list 搜尋方塊 ref
前言
有些頁面的連結開啟後,會重新開啟一個視窗,對於這種情況,想在新頁面上操作,就得先切換視窗了。擷取視窗的唯一標識用控制代碼表示,所以只需要切換控制代碼,我們就能在多個頁面上靈活自如的操作了。
本篇以開啟百度新聞頁面搜尋按鈕上的連結頁面為例,依次開啟每個按鈕,並實驗室檢驗結果。用指令碼大量操作,可以減少重複勞動,重複的事情讓指令碼去執行吧!
一、定位一組元素
1.開啟百度新聞頁面:17http://news.baidu.com/17
2.定位搜尋方塊上一排按鈕網頁、貼吧,知道等
3.定位一組元素方法在第八篇已經講過,這裡就不多講,通過firebug可以查看他們有共同屬性標籤為a,且有個老爸為:<div class="tab">
二、擷取當前視窗控制代碼
1.當點擊百度新聞頁面上“網頁”按鈕時,會開啟一個新的視窗
2.人為操作的話,可以通過點擊視窗切換到不同的視窗上,但是指令碼它不知道你要操作哪個視窗,這時候只能擷取視窗唯一的標識:控制代碼
3.擷取當前頁面的控制代碼:driver.current_window_handle
1470719326447960.png903x456 15.6 KB
三、擷取所有控制代碼
1.先通過css定位到所有按鈕:".tab>a"
2.從定位的一組中隨便取一個點擊開啟
3.然後擷取當前頁面的所有控制代碼,發現此時有兩個了
四、切換控制代碼
1.迴圈判斷是否與首頁控制代碼相等
2.如果不等,說明是新頁面的控制代碼
3.擷取的新頁面控制代碼後,可以切換到新開啟的頁面上
4.列印新頁面的title,看是否切換成功
五、關閉新視窗,切回首頁
1.開啟新頁面後,其實只想驗證新頁面跳轉對不對,這裡可以做個簡單的驗證,擷取當前頁面的title驗證
2.驗證完後切關閉新視窗
3.切回控制代碼到首頁
4.列印當前頁面的控制代碼,看是否切換到首頁了
六、大量操作
1.把需要校正的結果放在list隊列r裡
2.for迴圈遍曆執行每個按鈕的點擊操作
3.判斷結果對應list裡的每個結果
七、最終指令碼
1.整理後最終指令碼如下,結果
# coding:utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://news.baidu.com/")
driver.implicitly_wait(10)
# 擷取當前視窗控制代碼
h = driver.current_window_handle
# 定位網頁、貼吧等連結
s = driver.find_elements_by_css_selector(".tab>a")
r = [u"百度一下", u"貼吧", u"知道", u"音樂",
u"圖片", u"視頻", u"地圖", u"百科", u"文庫"]
for a, b in zip(s, r):
a.click()
text = a.text
time.sleep(2)
all_h = driver.window_handles
# 迴圈判斷是否與首頁控制代碼相等
for i in all_h:
if i != h:
driver.switch_to.window(i)
time.sleep(1)
print driver.title
if b in driver.title:
print(text+u"頁面開啟正常")
else:
print(text+u"頁面測試失敗")
driver.close() # 關閉當前頁面
driver.switch_to.window(h) # 切回控制代碼到首頁
driver.quit
Selenium2+python自動化13-多視窗、控制代碼(handle)