Python2 Selenium元素定位的实现(8种)
当我们想让Selenium自动地操作浏览器时,就必须告诉Selenium如何去定位某个元素或一组元素,每个元素都有着不同的标签名和属性值,Selenium提供了以下8种定位元素的方式,每种方式对应了2个方法:
find_element_by_(),是用来定位单个元素的,find_elements_by_(),是用来定位多个元素的。
- 通过id定位
- 通过name定位
- 通过class定位
- 通过tag定位
- 通过link定位
- 通过partiallink定位
- 通过xpath定位
- 通过css选择器定位
下面以百度首页为例进行举例说明:
1.通过id定位
find_element_by_id(id)
find_elements_by_id(id)
#_*_coding:utf-8_*_ fromseleniumimportwebdriver driver=webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #定位id为“kw”的元素 input_text=driver.find_element_by_id("kw") input_text.send_keys("selenium") driver.quit()
2.通过通过name定位
find_element_by_name(name)
find_elements_by_name(name)
#_*_coding:utf-8_*_ fromseleniumimportwebdriver driver=webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #定位name为“wd”的元素 input_text=driver.find_element_by_name("wd") input_text.send_keys("selenium") driver.quit()
3.通过class定位
find_element_by_class_name(name)
find_elements_by_class_name(name)
#_*_coding:utf-8_*_ fromseleniumimportwebdriver driver=webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #定位class名称为“s_ipt”的元素 input_text=driver.find_element_by_class_name("s_ipt") input_text.send_keys("selenium") driver.quit()
4.通过tag定位
find_element_by_tag_name(name)
find_elements_by_tag_name(name)
#_*_coding:utf-8_*_ fromseleniumimportwebdriver driver=webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #定位标签为的元素 input_text=driver.find_elements_by_tag_name("input") print(len(input_text)) driver.quit()
5.通过link定位
find_element_by_link_text(link_text)
find_elements_by_link_text(link_text)
#_*_coding:utf-8_*_ fromseleniumimportwebdriver driver=webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #定位链接文本完全匹配“我新闻”的元素 news=driver.find_element_by_link_text("新闻") news.click() driver.quit()
6.通过partiallink定位
find_element_by_partial_link_text(link_text)
find_elements_by_partial_link_text(link_text)
#_*_coding:utf-8_*_ fromseleniumimportwebdriver driver=webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #定位链接文本部分匹配“新”的元素 news=driver.find_element_by_partial_link_text("新") news.click() driver.quit()
7.通过xpath定位
find_element_by_xpath(xpath)
find_elements_by_xpath(xpath)
#_*_coding:utf-8_*_ fromseleniumimportwebdriver driver=webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #xpath定位,相对路径与属性结合定位搜索框 news=driver.find_element_by_xpath("//input[@id='kw']") news.click() driver.quit()
8.通过css选择器定位
find_element_by_css_selector(css_selector)
find_elements_by_css_selector(css_selector)
#_*_coding:utf-8_*_ fromseleniumimportwebdriver driver=webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") #css选择器,id定位密码输入框 news=driver.find_element_by_css_selector('#kw') news.click() driver.quit()
通用的终极定位语法
上面的所有元素定位find_element_by_xxx和find_elements_by_xxx调用的结果,实际上都是在调用以下两种方法,我们也可以直接调用一下两种方法即可。
find_element(self,by=By.ID,value=None):
find_elements(self,by=By.ID,value=None):
classBy(object): """ Setofsupportedlocatorstrategies. """ ID="id" XPATH="xpath" LINK_TEXT="linktext" PARTIAL_LINK_TEXT="partiallinktext" NAME="name" TAG_NAME="tagname" CLASS_NAME="classname" CSS_SELECTOR="cssselector"
例如:
fromselenium.webdriver.common.byimportBy #根据id,定位id为“world”的元素 world=driver.find_element(By.ID,"world") print(world.text) #xpath定位,相对路径与属性结合定位密码输入框 password=driver.find_element(By.XPATH,"//input[@name='password']") print(password.get_attribute("value")) #css选择器,标签+属性定位用户名输入框 username=driver.find_element(By.CSS_SELECTOR,"input[name='username']") print(username.get_attribute("value"))
这里只是简单介绍了8种元素定位方式的使用,比较简单易用的是通过id、name、class定位,我个人比较喜欢的是用xpath定位,当然,最灵活也是最强大的定位方式就是css,它也是比较难掌握的一种方式。关于xpath和css定位方式的详细介绍,可以
参考
selenium元素定位。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。