Python + Selenium(三)- 页面元素的常用方法、属性和三大切换

文章目录

      • 页面元素的常用属性
      • 页面元素的常用方法
      • 三大切换:
        • iframe切换
        • alert切换
        • 窗口切换

页面元素的常用属性

  1. tag_name:标签名
btn_ele = driver.find_element(By.id,'kw')
print(btn_ele.tagname)          # 结果:input
  1. text:文本内容
btn_ele = driver.find_element(By.id,'kw')
print(btn_ele.text)          # 结果:百度一下

页面元素的常用方法

  1. get_attribute(属性名):获取标签属性
v = btn.get_attribute("value")
print(v)            # 结果:百度一下
  1. is_displayed():元素是否可见,元素可见返回true,不可见返回false
is_visible = btn.is_displayed()
print(is_visible)       # 结果:true
  1. send_keys(文本内容):用来输入内容
  2. is_click():点击元素
  3. clear():清空表单

三大切换:

iframe切换

# 切换到指定的frame:1.指定iframe的name进行切换
driver.switch_to.frame("login_frame")
# 切换到指定的frame:2.通过索引进行切换,索引从0开始
driver.switch_to.frame(0)
# 切换到指定的frame:3.通过节点进行切换
ele = driver.find_element_by_xpath("//iframe[@id='login_frame']")
driver.switch_to.frame(ele)
driver.find_element_by_xpath("//a[@class='switch_btn']").click()
# 切换到指定的frame:4.使用显式等待的方式
WebDriverWait(driver,20,0.5).until(
  EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='login_frame']"))
)
driver.find_element_by_link_text("帐号密码登录").click()

# 切换回默认的HTML页面,无论你之前进入了哪个嵌套的iframe,都能够直接切刀最外面
driver.switch_to.default_content()
# 切换回上一个frame
driver.switch_to.parent_frame()

alert切换

在我的这篇

中已经介绍。

窗口切换

通过打印窗口句柄,我们能够发现打开的新窗口句柄总是在最后一个,那么我们可以使用 driver.switch_to.window(传入要切换的窗口对应句柄) ,切换到新窗口从而定位元素。
下面是切换的思路:

driver.get("https://www.baidu.com/")
driver.implicitly_wait(10)
driver.find_element_by_id("kw").send_keys("kaishui")
driver.find_element_by_id("su").click()
ws = driver.window_handles
# 打印弹出新窗口前的所有窗口句柄
print(ws) # 结果:['CDwindow-51C56D1B1F3CDD966CB534B3AEC14225']
# 点击百度搜索出来的第一个页面,会打开一个新的窗口
driver.find_element_by_xpath("//div[@id='1']//h3//a").click()
# 等待新窗口打开,如果没有打开新窗口就会报错
WebDriverWait(driver,5,0.5).until(
    EC.new_window_is_opened(ws)
)
ws = driver.window_handles
print(ws) # 结果:['CDwindow-51C56D1B1F3CDD966CB534B3AEC14225', 'CDwindow-1E7E70169C07E1268CBF50CC347BDAC1']
# 切换到新窗口
driver.switch_to.window(ws[-1])
# 定位新窗口上的元素
driver.find_element_by_xpath("//img[@title='与热水的不解之缘']").click()
time.sleep(2)
driver.quit()

对打开新窗口并切换的封装

from  selenium import webdriver
from  selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()

# 打开指定窗口并切换到该窗口
def new_open_window(driver,url):
    # 获得所有窗口的句柄
    start_window = driver.window_handles
    # 打开新窗口并跳转到指定页面
    js = 'window.open({});'.format(url)
    driver.execute_script(js)
    # 等待新窗口打开
    WebDriverWait(driver,10,0.5).until(
        EC.new_window_is_opened(start_window)
    )
    # 切换窗口
    driver.switch_to_window(driver.window_handles[-1])

你可能感兴趣的:(#,Python,+,Selenium)