当前位置: 首页 > news >正文

selenium页面元素定位、操作

selenium浏览器页面操作

      • 1 打开 / 关闭浏览器
      • 2 打开URL链接
      • 3 定位单个页面元素
        • 3.1 通过ID定位
        • 3.2 通过name定位
        • 3.3 通过classname定位
        • 3.4 通过CSS定位
        • 3.5 通过链接的文本信息定位
        • 3.6 通过XPath定位
          • 3.6.1 xpath语法
          • 3.6.2 实例
      • 4 操作
        • 4.1 基本操作
        • 4.2 切换窗口、框架

  
1、通过页面开发者工具(点击键盘F12或者空白处右击点击检查)中的element,查看页面html代码;
2、点击开发者工具左上角鼠标按钮;
3、鼠标移动至需要定位元素位置;
4、高亮显示;
5、右击选择定位方式。
在这里插入图片描述

1 打开 / 关闭浏览器

from selenium import webdriver
import time
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
url = 'https://www.csdn.net/'
browser.get(url)
browser.maximize_window()
time.sleep(5)
# browser.close() 
browser.quit() 

注意:
关闭浏览器close和quit的区别:
以下是两个函数的描述,可见close() 只关闭当前窗口;quit() 退出驱动程序并关闭所有相关窗口。

    def close(self) -> None:
        """
        Closes the current window.

        :Usage:
            ::

                driver.close()
        """
        self.execute(Command.CLOSE)

    def quit(self) -> None:
        """
        Quits the driver and closes every associated window.

        :Usage:
            ::

                driver.quit()
        """
        try:
            self.execute(Command.QUIT)
        finally:
            self.stop_client()
            self.command_executor.close()

2 打开URL链接

browser = webdriver.Chrome()
browser.get('https://www.csdn.net/')
browser.maximize_window()
time.sleep(5)
browser.quit()

3 定位单个页面元素

  使用find_element函数来定位元素。

3.1 通过ID定位

  id值在一个页面中是唯一的。

browser = webdriver.Chrome()
browser.get('https://www.csdn.net/')
browser.maximize_window()
time.sleep(5)
browser.find_element(By.ID, "toolbar-search-input").send_keys("python")
time.sleep(5)
browser.find_element(By.ID, "toolbar-search-button").click()
time.sleep(5)
browser.quit()

3.2 通过name定位

  name属性在同一个表单中唯一,但在页面不唯一。若有两个name属性相同的元素,使用该方法会定位到name属性第一次出现的地方。
在这里插入图片描述

browser.find_element(By.NAME, "username").click()

3.3 通过classname定位

  class属性同样不唯一,页面中可能会出现多个,使用该方法定位到的也是第一个拥有该class属性的元素。
在这里插入图片描述

browser.find_element(By.CLASS_NAME, "blog-nav-box").click()

3.4 通过CSS定位

  传入的参数格式:标签名[属性名=属性值],通过标签与属性的组合来唯一的定位页面元素

browser.find_element(By.CSS_SELECTOR, "input[id='toolbar-search-input']").click()

3.5 通过链接的文本信息定位

  这种方法只适合定位链接元素

browser.find_element(By.By.LINK_TEXT, "Python").click()

3.6 通过XPath定位

browser = webdriver.Chrome()
browser.get('https://www.csdn.net/')
browser.maximize_window()
browser.find_element(By.XPATH, '//*[@id="csdn-toolbar"]/div/div/div[3]/div/div[3]/a').click()
browser.find_element(By.XPATH, '//*[@id="toolbar-search-input"]').send_keys("人工智能")
browser.find_element(By.XPATH, '//*[@id="toolbar-search-button"]').click()
time.sleep(5)
browser.quit()
3.6.1 xpath语法
/表示一个层级,从根节点开始定位(绝对路径)
//表示多个层级,从任意位置开始定位
.选取当前节点
..选取当前节点的父节点
@选取属性
*匹配任何元素节点
//*选取文档中的所有元素
@*匹配任何属性节点
//title[@*]选取所有带有属性的title元素
3.6.2 实例
/div/div[3]选取div下的第三个div的元素
//div选取所有div元素,不管他们在文档中的位置
div//title选取div元素的后代的所有title元素
//@lang选取名为lang的所有属性
//title[@lang='eng]选取所有title元素,并且带有值为eng的lang属性
//div|//title选取文档中的所有div和title元素

4 操作

4.1 基本操作

# 清除文本框内容:使用clear()方法
browser.find_element(By.XPATH, '//*[@id="toolbar-search-input"]').clear() 
# 点击
browser.find_element(By.XPATH, '//*[@id="toolbar-search-button"]').click()  
# 填写文本内容
browser.find_element(By.XPATH, '//*[@id="toolbar-search-input"]').send_keys("人工智能") 
# 获取元素的属性信息:使用get_attribute(“属性名”)
browser.find_element(by, element_value).get_attribute('value') 

4.2 切换窗口、框架

 # 切换fram框架, "frame_value"可以是id、name属性值,也可以是序号index,假如有2个iframe
 # 第一个序号就是0
browser.switch_to.frame(frame_value)

# 切换窗口
handles = browser.window_handles # 获取当前全部窗口句柄集合
now_handle = driver.current_window_handle # 获取当前窗口句柄
browser.switch_to.window(now_handle) # 切换至当前窗口

# 切换alert
# accept - 点击【确认】按钮
# dismiss - 点击【取消】按钮(如有按钮)
# send_keys - 输入内容(如有输入框)
alert = switch_to.alert().accept()    #点击确认

相关文章:

  • webstorm网站开发配置/怎么免费推广自己网站
  • 网站做海外的防护/网络营销的目的是
  • 做网站运营有前途吗/深圳20网络推广
  • 怎样创建网站直播接口/搜索引擎优化的定义是什么
  • java语言做网站/做游戏推广一个月能拿多少钱
  • 百度推广 url主域名和注册网站不一致/各大网站
  • 手游联运是什么意思?
  • 【7】SCI易中期刊推荐——计算机 | 人工智能(中科院4区)
  • 【基础篇】4 # 链表(上):如何实现LRU缓存淘汰算法?
  • UE4c++日记1(允许 创类、蓝图读写/调用/只读、分类、输出日志打印语句)
  • 基于android的手机掌上购物
  • 力扣(LeetCode)382. 链表随机节点(2023.01.15)
  • 装修--避坑--橱柜
  • 如何实现六轴机械臂的逆解计算?
  • Win11玩不了红警怎么办?Win11玩不了红警解决方法分享
  • 论文工具大全+软件简介
  • 剑指offer五道题,C++实现,看看自己能不能解出来。
  • 华为MPLS跨域A、B方案实验配置