Selenium定位class包含空格的元素-复合class节点

在HTML中, 节点有三种常见属性, 分别是id, name和class, 其中class是一个特殊的属性, 支持多个类名, 以空格隔开, 如下图所示:

class包含空格的元素

你是否注意到, 为什么selenium中的find_element_by_class_name, 是by_class_name而不是, by_class呢?
首先我们要区分class属性和class_name的区别, 节点的class属性可以包含多个class_name, 每个以空格隔开, 如上图, 该按钮实际上是一个链接, class属性值为"btn btn-primary my-2", 其中包含三个class_name, 分别为"btn", "btn-primary", "my-2", 通过在开发者工具中按Ctrl+F搜索,我们可以发现"btn-primary"这个class_name是唯一的. 我们可以使用它来定位.

定位方式有3种:

  • 通过某个独特的class_name定位: dr.find_element_by_class_name('btn-primary')
  • 使用xpath通过完整的class属性定位: dr.find_element_by_xpath('//a[@class="btn btn-primary my-2"]')
  • 使用css selector, 通过某个属性或属性组合定位(推荐):
    dr.find_element_by_css_selector('.btn-primary')dr.find_element_by_css_selector('.btn-primary.my-2')

示例代码如下:

from selenium import webdriver

dr = webdriver.Chrome()
dr.get('http://qaschool.cn/')

# dr.find_element_by_class_name('btn-primary').click()  # 通过某个class_name定位
# dr.find_element_by_xpath('//a[@class="btn btn-primary my-2"]').click()  # 通过xpath结合完整的class属性定位

# dr.find_element_by_css_selector('.btn-primary').click()  # 通过css selector结合某个class_name定位
dr.find_element_by_css_selector('.btn-primary.my-2').click()  # 通过css selector结合多个class_name定位

转载于:https://www.cnblogs.com/superhin/p/11454865.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下代码来实现: ```python from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 加载浏览器驱动 driver = webdriver.Chrome() driver.get('你要访问的网址') # 等待元素加载完成 wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'drag-handle_right-handle'))) # 获取元素 drag_handle = driver.find_element_by_class_name('drag-handle_right-handle') # 获取元素的初始位置 initial_location = drag_handle.location['x'] # 获取元素的宽度 width = drag_handle.size['width'] # 获取元素的父元素 parent_element = drag_handle.find_element_by_xpath('..') # 获取元素的宽度 parent_width = parent_element.size['width'] # 计算需要拖动的距离 distance = parent_width - initial_location - width # 创建ActionChains对象 actions = ActionChains(driver) # 拖动元素 while True: actions.drag_and_drop_by_offset(drag_handle, distance, 0).perform() new_location = drag_handle.location['x'] if new_location == initial_location: break initial_location = new_location # 关闭浏览器 driver.quit() ``` 这段代码会打开Chrome浏览器,访问你想要拖动元素的页面,等待元素加载完成,获取元素的初始位置、宽度、父元素的宽度,计算需要拖动的距离,创建ActionChains对象,然后不停地拖动元素,直到元素无法继续拖动为止。最后关闭浏览器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值