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

Selenium获取指定元素坐标失败求助(附代码及报错信息)

解决Selenium获取元素中心坐标报错问题

我用Selenium编写代码,想要从https://tmrsearch.ipindia.gov.in/eregister/获取XPath为//*[@id="btnviewdetails"]元素的中心坐标,已经加了异常处理但还是报错。代码和报错信息如下:

原代码

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
import time

def get_element_center_coordinates(element):
    location = element.location
    size = element.size
    center_x = location['x'] + size['width'] / 2
    center_y = location['y'] + size['height'] / 2
    return center_x, center_y

# URL of the web page
url = "https://tmrsearch.ipindia.gov.in/eregister/"

# Initialize the WebDriver (Make sure to have the correct path to chromedriver)
browser = webdriver.Chrome()

try:
    # Open the URL and maximize the window
    browser.maximize_window()
    browser.get(url)

    # Allow the page to load completely
    WebDriverWait(browser, 30).until(
        EC.presence_of_element_located((By.XPATH, '//body'))  # Wait until the body is present
    )
    print("Page loaded successfully.")

    # Add more sleep to ensure everything is loaded (if necessary)
    time.sleep(5)

    # Print the current page source for debugging
    page_source = browser.page_source
    print("Current page source:\n", page_source)

    # Adjust the XPath to the element you want to find
    element_xpath = '//*[@id="btnviewdetails"] and text()="Trade Mark Application/Application Details"]'    # Locate the element
    element = WebDriverWait(browser, 30).until(
        EC.presence_of_element_located((By.XPATH, element_xpath))
    )
    print("Element found.")

    # Get the center coordinates of the element
    center_x, center_y = get_element_center_coordinates(element)
    print(f"Element center coordinates: ({center_x}, {center_y})")

except Exception as e:
    print("Exception occurred:", str(e))

finally:
    # Close the browser
    browser.quit()

报错信息

DevTools listening on ws://127.0.0.1:58581/devtools/browser/e8045f57-8eb5-4e79-9f39-101ab408ec63
Created TensorFlow Lite XNNPACK delegate for CPU.
Exception occurred: Message: 
Stacktrace:
        GetHandleVerifier [0x00007FF63FD01F52+60322]
        (No symbol) [0x00007FF63FC7CEC9]
        (No symbol) [0x00007FF63FB37EBA]
        (No symbol) [0x00007FF63FB87676]
        (No symbol) [0x00007FF63FB8773C]
        (No symbol) [0x00007FF63FBCE967]
        (No symbol) [0x00007FF63FBAC25F]
        (No symbol) [0x00007FF63FBCBC80]
        (No symbol) [0x00007FF63FBABFC3]
        (No symbol) [0x00007FF63FB79617]
        (No symbol) [0x00007FF63FB7A211]
        GetHandleVerifier [0x00007FF6400194AD+3301629]
        GetHandleVerifier [0x00007FF6400636D3+3605283]
        GetHandleVerifier [0x00007FF640059450+3563680]
        GetHandleVerifier [0x00007FF63FDB4326+790390]
        (No symbol) [0x00007FF63FC8750F]
        (No symbol) [0x00007FF63FC83404]
        (No symbol) [0x00007FF63FC83592]
        (No symbol) [0x00007FF63FC72F9F]
        BaseThreadInitThunk [0x00007FFD634E7344+20]
        RtlUserThreadStart [0x00007FFD636226B1+33]

问题分析与解决方案

1. XPath语法错误

原代码中的XPath存在两处错误:

  • 末尾多了一个冗余的]
  • 逻辑运算符and的用法不符合XPath规范,正确写法是将条件整合到同一个节点选择器中

修正后的XPath可以直接用id定位(最简洁可靠):

//*[@id="btnviewdetails"]

或者保留文本验证的正确写法:

//*[@id="btnviewdetails" and text()="Trade Mark Application/Application Details"]

2. 等待条件不恰当

使用presence_of_element_located仅确保元素存在于DOM中,但元素可能还未渲染可见,此时无法获取正确的坐标。需改用visibility_of_element_located,确保元素可见后再操作。

3. 适配页面iframe结构

该网站可能将核心内容嵌套在iframe中,需要先切换到iframe才能定位到目标元素,代码中需增加iframe检测与切换逻辑。


修正后的代码

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

def get_element_center_coordinates(element):
    location = element.location
    size = element.size
    center_x = location['x'] + size['width'] / 2
    center_y = location['y'] + size['height'] / 2
    return center_x, center_y

# URL of the web page
url = "https://tmrsearch.ipindia.gov.in/eregister/"

# Initialize the WebDriver
browser = webdriver.Chrome()

try:
    browser.maximize_window()
    browser.get(url)

    # 检测并切换到iframe(若页面存在iframe嵌套)
    try:
        iframe = WebDriverWait(browser, 10).until(
            EC.presence_of_element_located((By.TAG_NAME, "iframe"))
        )
        browser.switch_to.frame(iframe)
        print("Switched to iframe successfully.")
    except:
        print("No iframe found, proceeding without switching.")

    # 等待目标元素可见
    element_xpath = '//*[@id="btnviewdetails"]'
    element = WebDriverWait(browser, 30).until(
        EC.visibility_of_element_located((By.XPATH, element_xpath))
    )
    print("Element found and visible.")

    # 获取元素中心坐标
    center_x, center_y = get_element_center_coordinates(element)
    print(f"Element center coordinates: ({center_x}, {center_y})")

except Exception as e:
    print("Exception occurred:", str(e))

finally:
    # 切回主文档后关闭浏览器(若切换过iframe)
    try:
        browser.switch_to.default_content()
    except:
        pass
    browser.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:32:04