HTML,框架标签一共有三种:frameset、frame、iframe。对于frameset,和其他普通标签没什么区别,可以正常定位。而frame和iframe属于一种特殊的类型,它们里面会包含另外一个内嵌的HTML文档。当使用Selenium打开网页时,它不包含嵌入的HTML文档。如果需要对嵌入的HTML文档中的元素进行操作,必须将操作范围切换到嵌入的HTML文档中。Selenium提供的方法是:WebDriver.switch_to.frame(frame_reference)其中frame_reference可以是frame元素的属性名或id属性值(默认定位方式)。还有一种情况,如果没有属性name或者id,可以先定位frame元素,然后切换。fromseleniumimportwebdriverfromtimeimportslepedriver=webdriver.Chrome()#打开浏览器driver.get("https://mail.163.com/")#跳转到测试页面sleep(1)frame_element=driver.find_element_by_xpath("//iframe[contains(@id,'x-URS-iframe')]")#首先定位到iframe元素driver.switch_to.frame(frame_element)#切换到iframe元素的内层元素=driver.find_element_by_name("email")#定位元素element.send_keys("123456789")#输入内容sleep(3)driver.quit()#关闭浏览器。如果需要切换出去重新定位元素,Selenium提供的方法:序号方法/属性描述1WebDriver.switch_to。default_content()返回主文档2WebDriver.switch_to.parent_frame()返回父文档fromseleniumimportwebdriverfromtimeimportsleedbriver=webdriver.Chrome()#打开浏览器driver.get("https://mail.163.com/")#跳转到测试页面sleep(1)frame_element=driver.find_element_by_xpath("//iframe[contains(@id,'x-URS-iframe')]")#先定位iframe元素driver.switch_to.frame(frame_element)#切换到iframe元素里面element=driver.find_element_by_name("email")#定位元素element.send_keys("123456789")#输入内容sleep(2)driver.switch_to.parent_frame()#返回父文档#driver.switch_to.default_content()#返回主文档element1=driver.find_element_by_link_text("VIPmailbox")#定位元素element1.click()#点击sleep(3)driver.quit()#关闭浏览器摘要
