selenium筆記:窗口切換時的元素定位


主要參考蟲師的博客,他的文章里面講得比較簡單,有一些情況沒有考慮到,在這里做個筆記。

在蟲師的博客中講了如何在一個給定的網頁去定位元素,但是如果在實際操作中,需要由一個頁面跳轉到另一個頁面時,就需要頁面之間的切換了。

1. switch_to_window()

  這個方法在蟲師的博客中講得不是很詳細,我主要參考的是 http://blog.csdn.net/hhabc123456789/article/details/21862139

  直接上一個我用來測試的例子吧。 

#coding=utf-8

import os
from selenium import webdriver
import time


chrome = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
os.environ["webdriver.chrome.driver"] = chrome
driver = webdriver.Chrome(chrome)

driver.get('http://www.baidu.com')

#獲取當前窗口的句柄
currentWin = driver.current_window_handle

#跳轉到另一個新頁面
driver.find_element_by_xpath("//p[@id='nv']/a[3]").click()
time.sleep(1)
#獲取所有窗口的句柄
handles = driver.window_handles
for i in handles:
    if currentWin == i:
        continue
    else:
        #將driver與新的頁面綁定起來
        driver = driver.switch_to_window(i)
#在新的頁面定位元素
driver.find_element_by_xpath("//div[@id='menu']/a[1]").click()
time.sleep(2)
driver.quit()    

  應該比較清晰了,注釋里面都解釋了。

  補充一下:我本來以為只要網頁的url改變了,driver就需要更新。后來發現driver真的是對應到一個特定的窗口的。不論url如何更新,只要沒有新的“標簽頁”出現(html的實現上就是target="_blank"這種形式的),driver就不用更新,也就用不到這里的switch_to_window()的方法了。

 

2. switch_to_frame()

  這個方法蟲師將得比較清楚,可以參考這里的例子,只是有一個問題需要注意。如下代碼

#coding=utf-8
from selenium import webdriver
import time
import os

browser = webdriver.Firefox()
file_path =  'file:///' + os.path.abspath('frame.html')
browser.get(file_path)

browser.implicitly_wait(30)
#先找到到ifrome1(id = f1)
##############一定要先定位frame1,才能找得到fram2###############################
browser.switch_to_frame("f1")
#再找到其下面的ifrome2(id =f2)
browser.switch_to_frame("f2")


#下面就可以正常的操作元素了
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)

browser.quit()

  如注釋里面說明的,如果frame有嵌套的話,必須一層一層的找。否則會報錯。

  如上

 

 

 

 

 

Bon Appetite!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM