zoukankan      html  css  js  c++  java
  • 关于selenium自动化对iframe内嵌元素的处理

    今天上班闲来无聊,于是来练练自动化,结果碰上了可恶的iframe,楼主,以前也遇到过,但是一直也没搞懂怎么处理的,都是抄别人的代码,今天决定独立解决试试。首先先来认识什么是iframe,它就长下图这样

    我要操作的是属性是输入邮箱账号那里,我试过了我所掌握的所有xpath语法,结果一直定位不到这个元素,搞得我也是信心受挫。无意间我移动了下鼠标,才发现那里嵌了个iframe。要知道页面是否嵌套iframe可以借助火狐的一个插件firebug来查看。用firebug查看元素如果有iframe会显示iframe#xxx,没有iframe会显示top wondow。看下图左下角长这样iframe#xxx

    问题找到了就开始解决。思路,既然要操作的元素在iframe上,我们就要先进行切换到iframe里面去。先定位iframe的位置

    self.iframe = self.driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe[@scrolling = "no"]'),我这里用的xpath,也可以用id,name这些的。定位到了如下图所示

    根据xpath的一个插件显示我写的xpath已经定位到了iframe上,接下来就用 self.driver.switch_to.frame(self.iframe)切换到iframe里面,前面定位到iframe的位置,最好用一个变量接收存起来,然后再用switch_to切换到里面去,接下来就是正常定位元素的操作了。(当iframe上的操作完后,想重新返回主页面上操作元素,返时候,就可以用switch_to_default_content()方法返回到主页面面)这句话,来源于上海悠悠博客资料。我这里因为操作完了就登录了,所以就没有返回到主页面的操作,这里返回主页面指的是退出iframe内嵌属性。

    from selenium import webdriver
    import time
    
    class WangYi_Email():
        def __init__(self):
            '''打开浏览器'''
            self.driver = webdriver.Chrome()
    
        def OpenEmail(self,url):
            '''传入网易邮箱url'''
            self.driver.get(url)
            self.driver.maximize_window()
            time.sleep(0.01)
    
        def LoginEmail(self,email,password):
            '''输入账号和密码和iframe的处理'''
            # todo 点击密码登录
            self.driver.find_element_by_xpath('//a[text()="密码登录"]').click()
    
            # todo 定位iframe
            self.iframe = self.driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe[@scrolling = "no"]')
    
            # todo switch_to.frame进入到iframe里面去
            self.driver.switch_to.frame(self.iframe)
    
            # todo 输入邮箱号
            self.driver.find_element_by_xpath('//input[@name="email"]').send_keys(email)
    
            # todo 输入密码
            self.driver.find_element_by_xpath('//div[@class="u-input box"]//input[@name="password"]').send_keys(password)
    
            # todo 点击登录
            self.driver.find_element_by_xpath('.//*[@id="dologin"]').click()
    
        def closed(self):
            """关闭浏览器"""
            time.sleep(10)
            self.driver.quit()
    
    
    wy = WangYi_Email()
    wy.OpenEmail('https://mail.163.com/')
    wy.LoginEmail('email','password')
    wy.closed()
  • 相关阅读:
    微信小程序实现运动步数排行(可删除)
    微信小程序实现运动步数排行(可删除)
    一个文艺的在线生成漂亮的二维码工具网站
    微信小程序常见的UI框架/组件库总结
    天天快车是款精细的游戏
    MHA的几种死法-叶良辰
    编译maxscale
    mydbtest文档
    高山仰止
    docker居然需要3.10以上的内核
  • 原文地址:https://www.cnblogs.com/xiamaojjie/p/11396471.html
Copyright © 2011-2022 走看看