zoukankan      html  css  js  c++  java
  • python+selenium实现163邮箱登陆—iframe动态ID定位 及常用定位方法

    今天发现之前的登录163邮箱脚本定位不到iframe了,原因是iframe拼接了动态ID,修改后的脚本如下:

    from selenium import webdriver

    driver = webdriver.Firefox()
    driver.maximize_window()

    driver.get('http://mail.163.com')

    driver.find_element_by_id('switchAccountLogin').click()
    iframe = driver.find_element_by_xpath('//*[@id="loginDiv"]/iframe') # 使用Xpath选定位到iframe
    driver.switch_to.frame(iframe)          # 切换iframe
    # iframe = driver.find_element_by_xpath("//iframe[contains(@id, 'x-URS-iframe')]")  # 使用Xpath提供的contains定位
    # driver.switch_to.frame(iframe)
    driver.find_element_by_name('email').send_keys('name')
    driver.find_element_by_name('password').send_keys('password')
    driver.find_element_by_id('dologin').click()

    总结一下常见iframe定位方法。

    一、非动态的iframe,通常通过以下方式定位:

    1.有id,如果唯一,可直接写id

      driver.switch_to.frame("id")

    2.有name,如果唯一,可直接写name

      driver.switch_to.frame("name")

    3.无id,无name,可先定位到iframe元素 (该方法也通常用于定位动态ID)

      iframe = driver.find_elements_by_tag_name("iframe")[0]  (也可以通过Xpath、CSS等定位方法)

      driver.switch_to.frame(iframe)

    二、遇到动态Id可以利用xpath等元素属性来定位,下面列举xpath中提供的三个非常好的方法:

    1.contains(a, b) 如果a中含有字符串b,则返回true,否则返回false

      driver.find_element_by_xpath("//div[contains(@id, 'btn-attention')]")

    2.starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false

      driver.find_element_by_xpath("//div[starts-with(@id, 'btn-attention')]")

    3.ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false

      driver.find_element_by_xpath("//div[ends-with(@id, 'btn-attention')]") 



  • 相关阅读:
    秘密花园—那段岁月
    测试那些事儿—软测必备的Linux知识(三)
    测试那些事儿—软测必备的Linux知识(二)
    SharePoint 2010以其他用户身份登录的弹出代码
    JavaScript中cookie的路径(path)和域(domain)
    JavaScript变量不同类型之间的自动、手动类型转换
    编程习惯
    JavaScript的算术、赋值、关系运算符的讲解
    JavaScript的变量命名规则和关键字的介绍
    如何编写及运行JS
  • 原文地址:https://www.cnblogs.com/jiahm/p/11230096.html
Copyright © 2011-2022 走看看