selenium窗口之间的切换

import time

from selenium.webdriver import Edge
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys  # 键盘输入

# 1.创建浏览器对象
web = Edge()

# 2.打开一个网址
web.get("https://www.17k.com/")

# 找到某个元素,点击它
el = web.find_element(By.XPATH, '/html/body/div[4]/div[2]/div[2]/div[1]/div/h3[1]').click()

# 虽然切换了窗口但是selenium的眼里,窗口没有切换过去
web.switch_to.window(web.window_handles[-1])

time.sleep(1)  # 让浏览器缓一会,等他加载出来

# 在新窗口提取内容
text = web.find_element(By.XPATH, '//*[@id="bookInfo"]/dd/div[1]/p/a').text
print(text)

time.sleep(1)  # 让浏览器缓一会,等他加载出来

# 关掉子窗口
web.close()

# 变更selenium的视角,回到原来的窗口
web.switch_to.window(web.window_handles[0])
print(web.find_element(By.XPATH, '/html/body/div[4]/div[2]/div[2]/div[1]/div/h3[1]/a').text)



'''
# 如果页面中遇到了 iframe如何处理
'''
web.get('https://www.rcrlw.com/pr/120845-3-1.html')
# time.sleep(5)
web.implicitly_wait(1)  # 增加隐式等待 ,一直等待整个页面加载完成,直到超时

# 这里输出的是未进入iframe的内容
print(web.find_element(By.XPATH, '/html/head/title'))
# <selenium.webdriver.remote.webelement.WebElement
# (session="0f087508243dacde3bd65076e37e4d14",
# element="86a6f8cd-0fe4-44b4-8bac-2c117b21fe75")>


# 处理iframe的话,必须先拿到iframe,然后切换视角到iframe,再然后才可以拿数据
iframe = web.find_element(By.XPATH, '//*[@id="playleft"]/iframe')
web.switch_to.frame(iframe)  # 切换到iframe

web.implicitly_wait(1)  # 增加隐式等待 ,一直等待整个页面加载完成,直到超时
# 这里输出的是frame里面的内容
print(web.find_element(By.XPATH, '/html/head/title'))
# <selenium.webdriver.remote.webelement.WebElement
# (session="0f087508243dacde3bd65076e37e4d14",
# element="19298e88-1b6a-46d9-bf0b-dabc897ad116")>


web.switch_to.default_content()  # 切换回原页面
# 这里输出的是出去iframe的内容
print(web.find_element(By.XPATH, '/html/head/title'))
# <selenium.webdriver.remote.webelement.WebElement
# (session="0f087508243dacde3bd65076e37e4d14",
# element="86a6f8cd-0fe4-44b4-8bac-2c117b21fe75")>

 

posted @ 2023-03-06 23:05  0x1e61  阅读(717)  评论(0编辑  收藏  举报