防止自己遗忘,故作此为记录。
这套题牵扯到滑块。
步骤:
(1)进入例题,需要找到滑块与滑条。
需要注意的是,只能通过css选择器来筛选。
WebDriverWait(driver, 15).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "#slider")))
slider: object = driver.find_element(By.CSS_SELECTOR, "#slider")
container: object = driver.find_element(By.CSS_SELECTOR, "#container")
(2)之后需要动作链来操作。
但这里有个坑,就是滑过去了也不会使js刷新。
之后呢,我尝试用puautogui来拖拽,也尝试过了多重点击都没用。
最后我是连续拖了两次才解决的。
chain = ActionChains(driver, 15)
chain.drag_and_drop_by_offset(slider, container.size["width"], -container.size["height"])
chain.drag_and_drop_by_offset(slider, container.size["width"], -container.size["height"])
chain.perform()
总代码:
python"># -*- coding: utf-8 -*-
# -*- file: C02.py -*-from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from time import sleeptarget_url: str = r"https://www.spiderbuf.cn/playground/c02"service: object = ChromeService(r"c02\chromedriver-win64\chromedriver.exe")
options: object = ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_argument("--disable-blink-features=AutomationControlled")driver: object = Chrome(service=service, options=options)driver.get(target_url)WebDriverWait(driver, 15).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "#slider")))
slider: object = driver.find_element(By.CSS_SELECTOR, "#slider")
container: object = driver.find_element(By.CSS_SELECTOR, "#container")chain = ActionChains(driver, 15)
chain.drag_and_drop_by_offset(slider, container.size["width"], -container.size["height"])
chain.drag_and_drop_by_offset(slider, container.size["width"], -container.size["height"])
chain.perform()WebDriverWait(driver, 10).until(expected_conditions.visibility_of_element_located((By.XPATH, r"//tbody/tr/td[3]")))
res: list = driver.find_elements(By.XPATH, "//tbody/tr/td[3]")print(sum([eval(e.text) for e in res]) / len(res))