zoukankan      html  css  js  c++  java
  • python+selenium如何定位页面的元素,有几种定位元素的方法?

    首先,感谢MrCandy【selenium学习笔记一】python + selenium定位页面元素的办法。一文,在该文章中找到了解决我当前遇到问题的方法。

    遇到的问题描述:

      简单的的编写一个登录的脚本,但是在定位页面元素的地方出现了问题。我使用driver.find_element_by_id("loginForm").click()方法来定位‘登录’按钮元素,但其实该id对应的不仅仅是登录这个按钮所代表的区域,而是包括登录名、密码已经登录按钮在内的一整个区域,所示使用find_element_by_id来定位并播放时不能够正常进入,并报出”AttributeError: 'FirefoxWebElement' object has no attribute 'ckick'“错误,没办法,因为当时快下班了所以想了一个比较取巧的办法,那就是在输入登录密码后做一个‘回车’的键盘输入,已达到登录的目的,如“driver.find_element_by_id("password").send_keys(Keys.ENTER)

      今天是周末就想着来公司看看,毕竟这么普及的一个工具不应该没有应对我这种问题的办法,所以很凑巧的我看到了上面连接中的这篇文章

      下面我将复制该文章的部分内容,若要查看完整内容,请点击原文地址查看

      Python:

      1)查找元素的ID。

        from selenium import webdriver

        browser = webdriver.Firefox()

        browser.find_element_by_id("Element's id")

      2)通过元素的name来定位。

        browser.find_element_by_name("Element's name")

      3)通过所应用的样式表名className。

        browser.find_element_by_class_name("class name")

      4)通过CSS应用特征。

        find_element_by_css_selector("a[id='id']")

      5)通过链接的文本。

        browser.find_element_link_name("link name")

      6)通过XPATH定位。

        browser.find_element_by_xpath("//***[*='**']")

      看完上面这些,对我的代码进行了几种改进,实验结果证明上面方法都是可行有效的。

      下面是对几种定位方法的演示,演示访问的地址位移动网站地址。

    from selenium import webdriver
    import time
    import re
    #做一个等待的通用方法
    def sleep(sec=3):
        time.sleep(sec)
    
    driver = webdriver.Firefox()
    driver.get("http://m.mail.10086.cn")
    sleep()
    driver.find_element_by_name("UserName").send_keys("longname")
    sleep()
    driver.find_element_by_css_selector(".textBox_pw").send_keys("password") #使用class定位方式
    sleep()
    driver.find_element_by_id("loginBtn").click()
    sleep(10)
    line = driver.current_url
    matchObj = re.match(r'(^.*?.cn).*$',line,re.M|re.I)
    print(matchObj.group(1)) #输出当前的浏览器地址(不包含详细地址和参数)
    driver.find_element_by_xpath(".//*[@id='logout']/a/i").click()
    sleep()
    driver.find_element_by_link_text("重新登录").click()
    sleep()
    driver.quit()

      顺便在这里提出一个现在遇到的还没有得到解决的问题,那就是我再使用selenium的时候,IE和谷歌浏览器在写好脚本后能够正常在firefox运行但是不能在这两个浏览器运行的问题,驱动我都已经放在path路径下面了,但是在打开浏览器时还是会报错。希望有经验的博友可以为我解答。

  • 相关阅读:
    利用dockerfile定制镜像
    发布Docker 镜像到dockerhub
    Docker 停止容器
    133. Clone Graph
    132. Palindrome Partitioning II
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    127. Word Ladder
  • 原文地址:https://www.cnblogs.com/liyuhang/p/6535840.html
Copyright © 2011-2022 走看看