微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【selenium】元素定位

元素定位

Selenium提供了8种定位方式
1  id
2  name
3  classname
4  tag name
5  link text
6  partial link text
7  xpath
8  css selector

 

定位一个元素                          定位多个元素                             含义
find_element_by_id                    find_elements_by_id                   通过元素id定位
find_element_by_name                 find_elements_by_name                 通过元素name定位
find_element_by_class_name            find_elements_by_class_name           通过classname进行定位
find_element_by_tag_name              find_elements_by_tag_name             通过标签定位
find_element_by_link_text             find_elements_by_link_tex             通过完整超链接定位
find_element_by_partial_link_text     find_elements_by_partial_link_text    通过部分链接定位
find_elements_by_css_selector         find_elements_by_css_selector         通过css选择器进行定位
find_element_by_xpath                 find_elements_by_xpath                通过xpath表达式定位

 

 


 

根据id、name、classname元素定位 模拟输入

     # 根据id查找元素,.send_keys 输入信息 selenium
        chrome_browser.find_element_by_id('kw').send_keys('selenium')

        # 根据name查找元素,找到并输入 webdriver
        chrome_browser.find_element_by_name('wd').send_keys('webdriver')

        # 根据class查找元素,并输入信息 hello world
        chrome_browser.find_element_by_class_name("s_ipt").send_keys('hello world')

  

tag_name 标签名定位

    # 根据标签name查找元素
       chrome_browser.find_elements_by_tag_name('input')

 

link_text 文本链接定位元素 

        # 根据link_text定位元素 准确定位 标签需要是<a></a>才能定位到
        chrome_browser.find_element_by_link_text("新闻")

        # 根据link_text定位元素 模糊定位 标签需要是<a></a>才能定位到
        chrome_browser.find_element_by_partial_link_text("涨价")

        # 元素定位 模拟用户点击
        chrome_browser.find_element_by_link_text("贴吧").click()

  

根据id、class元素定位 模拟点击

        # 根据id查找元素,模拟用户进行点击
        chrome_browser.find_element_by_id('su').click()

        # 根据class name查找元素,模拟用户进行点击
        chrome_browser.find_element_by_class_name('s_btn').click()

    def baidu_selenium(self):
        """ 百度搜索selenium """
        driver = webdriver.Chrome()  # 打开Google浏览器
        driver.implicitly_wait(5)  # 未找到控件时 隐式等待5s
        driver.get("http://www.baidu.com")  # 打开网址
        print("页面标题:", driver.title)
        print("页面url:", driver.current_url)

        time.sleep(3)  # 强制等待3s
        input_Box = driver.find_element_by_class_name("s_ipt")  # class 元素定位
        input_Box.send_keys("selenium")  # 模拟用户输入
        print("元素 标签名:", input_Box.tag_name)
        print("元素 位置:", input_Box.location)
        print("元素 大小:", input_Box.size)
        print("selenium_id:", input_Box.id)
        print("获取id属性:", input_Box.get_attribute("id"))
        print("获取name属性:", input_Box.get_attribute("name"))
        print("获取class属性:", input_Box.get_attribute("class"))

        time.sleep(5)  # 强制等待5s
        baidu_button = driver.find_element_by_id('su')  # id 元素定位
        baidu_button.click()  # 模拟用户点击
        print("获取id属性:", baidu_button.get_property("id"))
        print("获取class属性:", baidu_button.get_attribute("class"))

        time.sleep(5)
        driver.find_element_by_name("wd").clear()  # name 元素定位 模拟用户清空输入框

        time.sleep(5)
        driver.quit()  # 关闭浏览器
示例

 

 

Xpath

表达式      描述
nodename    选取此节点的所有子节点。
/        从根节点选取(取子节点)。
//        从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。
.        选取当前节点。
..        选取当前节点的父节点。
@        选取属性
*       匹配任何元素节点
@*      匹配任何属性节点
node()    匹配任何类型的节点

参考链接https://www.runoob.com/xpath/xpath-tutorial.html 

 

    1、child  选取当前节点的所有子元素

     2、parent  选取当前节点的父节点

     3、descendant  选取当前节点的所有后代元素(子、孙等)

     4、ancestor  选取当前节点的所有先辈(父、祖父等)

     5、descendant-or-self  选取当前节点的所有后代元素(子、孙等)以及当前节点本身

     6、ancestor-or-self  选取当前节点的所有先辈(父、祖父等)以及当前节点本身

     7、preceding-sibling  选取当前节点之前的所有同级节点

     8、following-sibling  选取当前节点之后的所有同级节点

     9、preceding   选取文档中当前节点的开始标签之前的所有节点

    10、following   选取文档中当前节点的结束标签之后的所有节点

    11、self  选取当前节点

    12、attribute  选取当前节点的所有属性

    13、namespace  选取当前节点的所有命名空间节点

 

 

 

切换frame

# find_element_by_id()或find_element_by_class_name()
driver.switch_to.frame("xxx")

# 从子frame切换到父级frame (多重父级需要多个语句返回先辈节点)
driver.switch_to.parent_frame()

# 将焦点切换到认frame (多重父级单条返回先辈节点)
driver.switch_to.default_content()

 

 

 

 切换选项卡

        all_tab = driver.window_handles     # 获取所有选项卡 ,all_tab 类型为 list
        print(all_tab)
        time.sleep(3)
        driver.switch_to.window(all_tab[1])  # 切换选项卡
        print(driver.title)    

 

    def tieba(self):
        """ 贴吧 """
        driver = webdriver.Chrome()
        driver.get("http://www.baidu.com")
        driver.find_element_by_link_text("贴吧").click()
        all_tab = driver.window_handles  # 获取所有选项卡
        print(all_tab)

        time.sleep(3)
        driver.switch_to.window(all_tab[1])  # 切换选项卡
        print(driver.title)
        driver.find_element_by_link_text("百度首页").click()  # 对贴吧进行操作

        time.sleep(3)
        driver.switch_to.window(driver.window_handles[0])  # 再次切换选项卡
        print(driver.title)

        time.sleep(5)
        driver.find_element_by_id("kw").send_keys("微博")  # 对百度进行搜索
        time.sleep(3)
        driver.find_element_by_id("su").click()

        time.sleep(5)
        driver.quit()
示例

 

 

 

执行结果:

 

 

获取元素属性

user = driver.find_element_by_xpath("//input[@id='IdInput']").get_attribute("placeholder")
pass = driver.find_element_by_xpath("//input[@id='PwdInput']").get_attribute("placeholder")

 

执行结果: 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐