一、iframe切换
当页面中包含iframe时,不能直接操作iframe中的元素,需要先切换进iframe,再进行操作
selenium通过driver.switch_to.frame(frame_reference)来切换
selenium切换iframe有三种方式
1.1 通过webelement
使用webelement进行切换是最灵活的选择,先定位到iframe然后再切换到它
import time
from selenium import webdriver
# 使用with语句进行上下文管理
# 异常时也会关闭游览器驱动
with webdriver.Chrome() as driver:
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_form_radio')
# 切换iframe
# 1.webelement的方式
# 先获取到iframe
iframe=driver.find_element_by_id('iframeResult')
# 再切换到
driver.switch_to.frame(iframe)
# 找到female单选框
female=driver.find_element_by_xpath('//input[@value="female"]')
print(female)
1.2 通过name或id
iframe一般都会有id或name属性,则可以使用该属性进行切换,如果name或id在页面上不唯一,name将切换到找到的第一个
import time
from selenium import webdriver
# 使用with语句进行上下文管理
# 异常时也会关闭游览器驱动
with webdriver.Chrome() as driver:
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_form_radio')
# 2.name/id的方式
# 直接通过name/id切换
driver.switch_to.frame('iframeResult')
# 找到female单选框
female=driver.find_element_by_xpath('//input[@value="female"]')
print(female)
1.3 通过iframe在页面中的索引进行切换(从0开始)
通过页面iframe的索引进行切换
import time
from selenium import webdriver
# 使用with语句进行上下文管理
# 异常时也会关闭游览器驱动
with webdriver.Chrome() as driver:
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_form_radio')
# 3.使用索引,索引从0开始
# 切换到第二个iframe
time.sleep(1)
driver.switch_to.frame(1)
# 找到female单选框
female=driver.find_element_by_xpath('//input[@value="female"]')
print(female)
1.4 离开iframe
离开iframe,切换到默认window
# 切回到默认内容
driver.switch_to.default_content()
二、下拉框切换
2.1 通过option操作
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select
# 使用with语句进行上下文管理
# 异常时也会关闭游览器驱动
with webdriver.Chrome() as driver:
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select')
# 切换iframe
iframe=driver.find_element_by_id('iframeResult')
driver.switch_to.frame(iframe)
# 找到audi选项
# 1.通过option直接操作
option=driver.find_element_by_xpath('//option[@value="audi"]')
option.click()
time.sleep(3)
2.2 通过select类操作
select.select_by_index(index) 参数index表示的option索引
select.select_by_value(value) 参数value表示的是option元属中value的属性值
select.select_by_visible_text(visible_text ) 参数visible_text表示的是option的文本内容
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select
# 使用with语句进行上下文管理
# 异常时也会关闭游览器驱动
with webdriver.Chrome() as driver:
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select')
# 切换iframe
iframe=driver.find_element_by_id('iframeResult')
driver.switch_to.frame(iframe)
# 2.通过select类操作
# 找到select
select=Select(driver.find_element_by_xpath('//select[@name="cars"]'))
# 2.1通过索引操作
# 选中索引为1的选项,索引从0开始
select.select_by_index(1)
time.sleep(3)
# 2.2通过value操作(选中value等于audi的选项)
select.select_by_value('audi')
time.sleep(3)
# 2.3选中option的文本为volvo的选项
select.select_by_visible_text('Volvo')
time.sleep(3)