Python+selenium(多表單、多窗口切換)


多表單切換

案例:在Frame.html文件種定位搜狗搜索頁面,進行搜索操作

Frame.html

<html>
<head>
<title>Frame_test</title>
</head>

<body>
    <div>
        <iframe id="search" src="http://www.sogou.com" width="800" height="500">
    </div>
</body>

<html>

瀏覽器打開:

frame_test.py

from selenium import webdriver
from time import sleep

driver=webdriver.Firefox()
file_path=r'E:\python_script\Webdriver\1.html'
driver.get(file_path)

# 切換到iframe(id="if")
driver.switch_to.frame('search')

driver.find_element_by_id("query").send_keys("python")
sleep(2)
driver.find_element_by_id("stb").click()
sleep(2)
driver.quit()

多表單切換,是通過switch_to.frame()方法將當前定位的主題切換為frame/iframe表單的內切頁面中。

switch_to.frame()默認可以直接取表單的id或name屬性。如果iframe沒有可用的id和name屬性,則可以通過下面的方式進行定位

# 先通過xpath定位到iframe
xf = driver.find_element_by_xpath('//*[@class="search"]')

# 再將定位對象傳給switch_to.frame()方法
driver.switch_to.frame(xf)

多窗口切換

案例:在百度學術首頁,點擊注冊按鈕,進入注冊頁面,然后返回學術搜索頁面,輸入關鍵詞搜索

 windows.py

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://xueshu.baidu.com/")

# 獲得百度學術搜索窗口句柄
search_windows = driver.current_window_handle
sleep(2)

driver.find_element_by_link_text('注冊').click()
sleep(2)

# 獲得當前所有打開的窗口的句柄
all_handles = driver.window_handles

# 進入注冊窗口
for handle in all_handles:
    if handle!=search_windows:
        print('now is register window!')
        sleep(2)

# 回到學術搜索窗口
for handle in all_handles:
    if handle == search_windows:
        driver.switch_to.window(search_windows)
        sleep(2)
        print("now is search window!")
        driver.find_element_by_id('kw').send_keys('selenium')
        driver.find_element_by_id('su').click()
        sleep(2)

driver.quit()

webdriver提供了switch_to.window()方法,可以實現在不同的窗口之間切換。

在本案例中,涉及到的方法如下:

current_window_handle:獲得當前窗口句柄

window_handles:返回所有窗口的句柄到當前會話

 


免責聲明!

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



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