如何通过Selenium访问'rect'类型的元素-Python

How to access to 'rect' type element through Selenium-Python

dom中有一个rect对象:

<rect class="slv-blank" id="id123" height="8.8" stroke-width="1px" width="18.8" x="59.2" y="37.5"></rect>

我正在尝试使用以下代码搜索它:

WebDriverWait(driver, 1).until(ec.presence_of_element_located(("xpath", '//rect[@id="id123"]'))).click()

这行不通。

但以下内容确实如此:

WebDriverWait(driver, 1).until(ec.presence_of_element_located(("xpath", '//*[name()="rect"][@id="id123"]'))).click()

关于为什么第一个不起作用的任何线索?

使用Actionclass或JavaScript执行器。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.action_chains import ActionChains
elememnt=WebDriverWait(driver, 1).until(ec.presence_of_element_located(("xpath", '//*[@id="id123"]')))
ActionChains(driver).move_to_element(elememnt).click().perform()

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.action_chains import ActionChains
elememnt=WebDriverWait(driver, 1).until(ec.presence_of_element_located(("xpath", '//*[@id="id123"]')))
driver.execute_script("arguments[0].click();",elememnt)

<rect>

创建矩形的 <rect> element is a basic SVG 形状,由角的位置、宽度和高度定义。矩形的角可能是圆角的。

一个例子:

<svg viewBox="0 0 220 100" xmlns="http://www.w3.org/2000/svg">
  <!-- Simple rect element -->
  <rect x="0" y="0" width="100" height="100" />

  <!-- Rounded corner rect element -->
  <rect x="120" y="0" width="100" height="100" rx="15" ry="15" />
</svg>

属性

<rect>个元素的attributes如下:

  • x:该属性决定了矩形的x坐标。
    • 值类型:| ;默认值:0;动画化:是
  • y:该属性决定了矩形的y坐标。
    • 值类型:| ;默认值:0;动画化:是
  • width:这个属性决定了矩形的宽度。
    • 值类型:自动|| ;默认值:自动;动画化:是
  • height:这个属性决定了矩形的高度。
    • 值类型:自动|| ;默认值:自动;动画化:是
  • rx:该属性决定了矩形的水平角半径。
    • 值类型:自动|| ;默认值:自动;动画化:是
  • ry:该属性决定了矩形的垂直角半径。
    • 值类型:自动|| ;默认值:自动;动画化:是
  • pathLength:此属性允许以用户单位指定路径的总长度。
    • 值类型:;默认值:none;动画化:是

Note: Starting with SVG2 x, y, width, height, rx and ry are Geometry Properties, meaning those attributes can also be used as CSS properties for that element.


这个用例

由于 <rect> 元素是 SVG 元素,因此要定位此类元素,您必须明确指定 SVG namespace when accessing the elements using ,如下所示:

  • 对于<svg>个元素:

    //*[name()="svg"]
    
  • 对于<g>个元素:

    //*[name()="svg"]/*[name()="g"]
    
  • 对于<rect>个元素:

    //*[name()="svg"]/*[name()="g"]/*[name()="rect"]
    //*[name()="svg"]/*[name()="rect"]
    

参考资料

您可以在

中找到一些相关的详细讨论