当前位置:脚本大全 > > 正文

pythonselenium怎么设置元素(Python2 Selenium元素定位的实现8种)

时间:2022-01-23 02:13:39类别:脚本大全

pythonselenium怎么设置元素

Python2 Selenium元素定位的实现8种

当我们想让 Selenium 自动地操作浏览器时,就必须告诉 Selenium 如何去定位某个元素或一组元素,每个元素都有着不同的标签名和属性值,Selenium 提供了以下8种定位元素的方式,每种方式对应了2个方法:
find_element_by_( ),是用来定位单个元素的,find_elements_by_( ),是用来定位多个元素的。

下面以百度首页为例进行举例说明:

1.通过 id 定位

find_element_by_id(id)
find_elements_by_id(id)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • # _*_ coding:utf-8 _*_
  • from selenium import webdriver
  •  
  • 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)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • # _*_ coding:utf-8 _*_
  • from selenium import webdriver
  •  
  • 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)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • # _*_ coding:utf-8 _*_
  • from selenium import webdriver
  •  
  • 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)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • # _*_ coding:utf-8 _*_
  • from selenium import webdriver
  •  
  • driver = webdriver.Chrome()
  • driver.maximize_window()  
  • driver.get("https://www.baidu.com/")
  • # 定位标签为<input>的元素
  • 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)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • # _*_ coding:utf-8 _*_
  • from selenium import webdriver
  •  
  • driver = webdriver.Chrome()
  • driver.maximize_window()  
  • driver.get("https://www.baidu.com/")
  • # 定位链接文本完全匹配“我新闻”的元素
  • news = driver.find_element_by_link_text("新闻")
  • news.click()
  •  
  • driver.quit()
  • 6.通过 partial link 定位

    find_element_by_partial_link_text(link_text)
    find_elements_by_partial_link_text(link_text)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • # _*_ coding:utf-8 _*_
  • from selenium import webdriver
  •  
  • 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)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • # _*_ coding:utf-8 _*_
  • from selenium import webdriver
  •  
  • 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)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • # _*_ coding:utf-8 _*_
  • from selenium import webdriver
  •  
  • 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):

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • class By(object):
  •   """
  •   Set of supported locator strategies.
  •   """
  •  
  •   ID = "id"
  •   XPATH = "xpath"
  •   LINK_TEXT = "link text"
  •   PARTIAL_LINK_TEXT = "partial link text"
  •   NAME = "name"
  •   TAG_NAME = "tag name"
  •   CLASS_NAME = "class name"
  •   CSS_SELECTOR = "css selector"
  • 例如:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • from selenium.webdriver.common.by import By
  • # 根据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 元素定位。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:https://segmentfault.com/a/1190000018260866

    上一篇下一篇

    猜您喜欢

    热门推荐