首页 > 其他 > 详细

关于selenium自动化对iframe内嵌元素的处理

时间:2019-08-22 20:42:08      阅读:109      评论:0      收藏:0      [点我收藏+]

今天上班闲来无聊,于是来练练自动化,结果碰上了可恶的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()

 

关于selenium自动化对iframe内嵌元素的处理

原文:https://www.cnblogs.com/xiamaojjie/p/11396471.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!