【selenium】元素定位

元素定位

复制代码
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()    匹配任何类型的节点
复制代码
复制代码
   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  选取当前节点的所有命名空间节点
Xpath
复制代码

 

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

 

 

获取元素属性值

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

 

执行结果: 

 

切换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()
示例
复制代码

执行结果:

 

 

 

 

posted @   Phoenixy  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示