如何通过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()
关于为什么第一个不起作用的任何线索?
使用Action
class或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 xpath,如下所示:
对于<svg>
个元素:
//*[name()="svg"]
对于<g>
个元素:
//*[name()="svg"]/*[name()="g"]
对于<rect>
个元素:
//*[name()="svg"]/*[name()="g"]/*[name()="rect"]
//*[name()="svg"]/*[name()="rect"]
参考资料
您可以在
中找到一些相关的详细讨论
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()
关于为什么第一个不起作用的任何线索?
使用Action
class或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 xpath,如下所示:
对于
<svg>
个元素://*[name()="svg"]
对于
<g>
个元素://*[name()="svg"]/*[name()="g"]
对于
<rect>
个元素://*[name()="svg"]/*[name()="g"]/*[name()="rect"] //*[name()="svg"]/*[name()="rect"]
参考资料
您可以在
中找到一些相关的详细讨论