Selenium selenium 实践之 指定百分比滑动进度条

Demon · 2021年09月07日 · 最后由 lulu 回复于 2021年09月09日 · 2940 次阅读
  1. 网站链接:
    https://www.layui.com/demo/slider.html

  2. 要滑动的元素

  3. 我写的代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time    : 2021/7/20 上午10:21
# @Author  : demon
# @File    : sss.py
# ==================================

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains


def calc_off_set(driver, slider, percentage):
    """
    :param driver: webdriver对象
    :param slider: 可以拖动的那个小原点元素对象
    :param percentage: 要指定滑动的百分比
    :return: 需要滑动的偏移量
    """
    #滑动一个像素,再划回去一个像素,目的就是为了获取到slider_tips_driver的textContent值
    action_chains.drag_and_drop_by_offset(slider, 1, 0).perform()
    action_chains.drag_and_drop_by_offset(slider, -1, 0).perform()

    # 这个元素才能获取到当前的百分比
    slider_tips_driver = driver.find_element_by_xpath('//*[@id="slideTest2"]/div/div[1]')
    slider_tips_value = float(slider_tips_driver.get_attribute("textContent"))

    #获取小原点到左侧父元素框的距离(左偏移量)
    slider_bar_value = float(slider.get_attribute("offsetLeft"))

    #求出百分之一对应的偏移量的大小
    off_set_unit = slider_bar_value / slider_tips_value  # 求出百分之一的偏移量

    #求出需要的偏移量
    return (percentage-slider_tips_value)*off_set_unit



#浏览器驱动地址
driver = webdriver.Chrome("/home/demon/work/test/chromedriver")
driver.get("https://www.layui.com/demo/slider.html")
action_chains = ActionChains(driver)
#要拖动的元素定位
slider = driver.find_element_by_xpath('//*[@id="slideTest2"]/div/div[3]')
xoffset = calc_off_set(driver, slider, 18)

#选中元素,并按下鼠标左键
action_chains.click_and_hold(slider).perform()
#拖动到指定位置
action_chains.drag_and_drop_by_offset(slider, xoffset/2, 0).perform()
#松开鼠标左键
action_chains.release().perform()

疑问

xoffset 应该是正确的偏移量,但是不知道为什么除以 2,才能滑到我想要的结果,有大佬可以指点一下吗??

共收到 1 条回复 时间 点赞

可以看看下面这句代码,获取到的值是多少,菜鸡百度了一下,每种浏览器对于获取 offsetLeft 得到的值都是不一样,而且有的是到浏览器窗口的宽度,不知道对不对....

slider_bar_value = float(slider.get_attribute("offsetLeft"))

是不是可以考虑,获取长度条的尺寸进行计算:

slider_bar_value = float(driver.find_element_by_xpath('//*[@id="slideTest2"]/div/div[2]').size)
 #求出百分之一对应的偏移量的大小
    off_set_unit = slider_bar_value['width'] / slider_tips_value  # 求出百分之一的偏移量
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册