首页 > 解决方案 > Selenium 拖动单击后更改的滑块

问题描述

我正在尝试使用 selenium 和 python 自动化滑动元素。

我遇到了一个问题,例如我要拖动的元素在单击后发生变化,并且我的元素引用过时

“消息:过时的元素引用:元素未附加到页面文档”

    element = driver.find_element_by_css_selector('#section_pickup > div.area__content > div.ng-scope > div.overlay-grey.ng-scope > div > div:nth-child(2) > div > div.ng-scope.pickup-shown-wrapper > div > span > span.irs-slider.to')
    actions.drag_and_drop_by_offset(element,-50,0)

这是滑块结构

<div
  ewf-pickup-slider="pickupWindowCtrl.rangeSliderOptions"
  class="ng-isolate-scope"
>
  <span class="irs js-irs-0 irs-with-grid"
    ><span class="irs"
      ><span class="irs-line" tabindex="-1"
        ><span class="irs-line-left"></span><span class="irs-line-mid"></span
        ><span class="irs-line-right"></span></span
      ><span class="irs-min" style="display: none; visibility: hidden">0</span
      ><span class="irs-max" style="display: none; visibility: hidden">1</span
      ><span
        class="irs-from"
        data-content="Earliest"
        style="visibility: visible; left: -2.12418%"
        >12:00</span
      ><span
        class="irs-to"
        data-content="Latest"
        style="visibility: visible; left: 95.5882%"
        >18:00</span
      ><span class="irs-single" style="visibility: hidden; left: 42.8105%"
        >12:00 — 18:00</span
      ></span
    ><span class="irs-grid" style="width: 97.7124%; left: 1.04379%"
      ><span class="irs-grid-pol" style="left: 0%"></span
      ><span
        class="irs-grid-text js-grid-text-0"
        style="left: 0%; margin-left: -2.94118%"
        >12:00</span
      ><span class="irs-grid-pol small" style="left: 20%"></span
      ><span class="irs-grid-pol small" style="left: 15%"></span
      ><span class="irs-grid-pol small" style="left: 10%"></span
      ><span class="irs-grid-pol small" style="left: 5%"></span
      ><span class="irs-grid-pol" style="left: 25%"></span
      ><span
        class="irs-grid-text js-grid-text-1"
        style="left: 25%; visibility: visible; margin-left: -2.94118%"
        >13:30</span
      ><span class="irs-grid-pol small" style="left: 45%"></span
      ><span class="irs-grid-pol small" style="left: 40%"></span
      ><span class="irs-grid-pol small" style="left: 35%"></span
      ><span class="irs-grid-pol small" style="left: 30%"></span
      ><span class="irs-grid-pol" style="left: 50%"></span
      ><span
        class="irs-grid-text js-grid-text-2"
        style="left: 50%; visibility: visible; margin-left: -2.94118%"
        >15:00</span
      ><span class="irs-grid-pol small" style="left: 70%"></span
      ><span class="irs-grid-pol small" style="left: 65%"></span
      ><span class="irs-grid-pol small" style="left: 60%"></span
      ><span class="irs-grid-pol small" style="left: 55%"></span
      ><span class="irs-grid-pol" style="left: 75%"></span
      ><span
        class="irs-grid-text js-grid-text-3"
        style="left: 75%; visibility: visible; margin-left: -2.94118%"
        >16:30</span
      ><span class="irs-grid-pol small" style="left: 95%"></span
      ><span class="irs-grid-pol small" style="left: 90%"></span
      ><span class="irs-grid-pol small" style="left: 85%"></span
      ><span class="irs-grid-pol small" style="left: 80%"></span
      ><span class="irs-grid-pol" style="left: 100%"></span
      ><span
        class="irs-grid-text js-grid-text-4"
        style="left: 100%; margin-left: -2.94118%"
        >18:00</span
      ></span
    ><span
      class="irs-bar"
      style="cursor: ew-resize; left: 1.14379%; width: 97.7124%"
    ></span
    ><span class="irs-shadow shadow-from" style="display: none"></span
    ><span class="irs-shadow shadow-to" style="display: none"></span
    ><span class="irs-slider from" style="left: 0%"></span
    ><span class="irs-slider to" style="left: 97.7124%"></span></span
  ><input
    type="text"
    ewf-range-slider="pickupSliderCtrl.sliderOptions"
    class="ng-isolate-scope irs-hidden-input"
    readonly=""
  />
</div>

我想拖放<span class="irs-slider to" style="left: 97.7124%">它正在改变它的类和点击样式

有没有办法使用硒滑动它?

标签: pythonseleniumselenium-webdriverselenium-chromedriver

解决方案


webdriver.ActionChains(driver).click_and_hold(sliderelement).move_by_offset(100, 0).perform()

使用 click_and_hold 并按偏移量移动,您应该单击滑块元素


推荐阅读