Selenium-ActionChains类

一、介绍

  • move_to_element(element):将鼠标移动到指定的元素上。
  • move_to_element_with_offset(element, xoffset, yoffset):将鼠标移动到指定元素的偏移位置。
  • click(element=None):单击指定的元素。如果未指定元素,将在当前鼠标位置单击。
  • click_and_hold(element=None):按住指定元素。如果未指定元素,将在当前鼠标位置按住。
  • double_click(element=None):双击指定的元素。如果未指定元素,将在当前鼠标位置双击。
  • context_click(element=None):右击指定的元素。如果未指定元素,将在当前鼠标位置右击。
  • drag_and_drop(source, target):将源元素拖拽到目标元素上。
  • drag_and_drop_by_offset(source, xoffset, yoffset):将源元素拖拽到指定的偏移位置。
  • key_down(value, element=None):按住指定的键。如果提供了元素,将在元素上按住键。
  • key_up(value, element=None):释放指定的键。如果提供了元素,将在元素上释放键。
  • send_keys(*keys_to_send):在当前鼠标位置的元素上发送按键。
  • send_keys_to_element(element, *keys_to_send):在指定元素上发送按键。
  • pause(seconds):暂停指定的秒数。
  • perform():执行ActionChains中的所有操作。

 

二、引用

from selenium.webdriver import ActionChains

 

三、使用示例

1、访问高德地图:https://www.amap.com/

 

2、点击北京

 

3、示例代码

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import os

URL = "https://www.amap.com"
# 偏移量:相对目标元素左上角的位置,可按需调整
OFFSET_X = 200
OFFSET_Y = 200

def build_driver():
    # 如不想每次都杀掉进程,可去掉下一行
    os.system("taskkill /f /im chromedriver.exe")
    opts = webdriver.ChromeOptions()
    opts.add_experimental_option("excludeSwitches", ["enable-automation"])
    opts.add_argument("disable-blink-features=AutomationControlled")
    # 如需无头:opts.add_argument("--headless=new")
    return webdriver.Chrome(options=opts)

def click_map(driver):
    wait = WebDriverWait(driver, 10)
    try:
        driver.get(URL)
        driver.maximize_window()

        # 等待地图层可见
        ly = wait.until(EC.visibility_of_element_located((By.ID, "renderArrowLayer")))
        actions = ActionChains(driver)
        # 偏移点击
        actions.move_to_element_with_offset(ly, OFFSET_X, OFFSET_Y).click().perform()
        print("点击成功")
    except TimeoutException:
        print("等待元素超时")
    except Exception as e:
        print(f"点击失败: {e}")

def main():
    driver = build_driver()
    try:
        click_map(driver)
        WebDriverWait(driver, 5).until(lambda d: True)  # 简单等待,必要时替换为成功标识
    finally:
        driver.quit()  # 如需观察页面,可注释掉

if __name__ == "__main__":
    main()

 

4、实现后效果

 

5、Page Ruler  点击进行下载

 

posted @ 2024-06-04 17:49  莲(LIT)  阅读(173)  评论(0)    收藏  举报