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
相关产品推荐
相关产品推荐

