You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium代码仅打开浏览器无后续操作,move_to_location及click失效求助

问题原因及解决方案

你的代码无法实现需求主要有以下几个原因:

  • 页面元素未加载完成就执行操作:kleki的绘图canvas还没渲染好,动作就已经执行了,自然没有效果。
  • 绝对坐标不匹配绘图区域:move_to_location(50,50)是基于浏览器窗口的绝对坐标,但绘图的canvas元素可能有页面偏移,直接用窗口坐标无法精准定位到绘图区域内的点。
  • 动作链使用错误:分开调用perform()会重置动作链,第二次的click()不会跟随之前的移动动作,相当于在原位置点击。

修正后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("https://kleki.com/")

# 等待绘图用的canvas元素加载完成,最多等10秒
canvas = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "canvas#drawing"))
)

# 构建连贯的动作链:先移动到canvas元素左上角偏移50,50的位置,再点击
action = ActionChains(driver)
action.move_to_element_with_offset(canvas, 50, 50).click().perform()

关键说明

  1. 等待元素加载:用WebDriverWait确保canvas元素存在后再操作,避免因页面未渲染完成导致的无效动作。
  2. 相对元素偏移定位:move_to_element_with_offset以canvas元素的左上角为原点计算坐标,完全匹配绘图区域的坐标系,比窗口绝对坐标更可靠。
  3. 连贯动作链执行:把移动和点击动作放在同一个链中,一次调用perform(),保证动作的连贯性。

内容的提问来源于stack exchange,提问作者MouseWarrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:26:23