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路径下面了,但是在打开浏览器时还是会报错。希望有经验的博友可以为我解答。

posted @ 2017-03-11 18:45  归去来兮-吾乃少年  阅读(20693)  评论(0编辑  收藏  举报