【问题标题】:How to find coordinates from <line> element using Selenium and Python如何使用 Selenium 和 Python 从 <line> 元素中查找坐标
【发布时间】:2021-05-03 07:09:24
【问题描述】:

在浏览器中我需要提取这个元素:

<line stroke="#003088" stroke-width="15.562500357627869" stroke-linecap="round" marker-end="url(#arrowhead-pb)" opacity="0.4" x1="166.00000381469727" y1="431.6000099182129" x2="166.00000381469727" y2="309.17500710487366" cgHash="531.2000122070312,531.2000122070312,c2,c4,paleBlue"></line>

此元素不可交互,但我仍然需要将 x1、x2、y1、y2 坐标保存到变量中。唯一对我有用的 find 选项是 driver.find_element_by_tag_name('line') 但这会返回坐标 {'x': 611, 'y': 372} 这显然不是我想要的。

我的问题:有什么方法可以从网络浏览器中提取准确的坐标?主要是x1,x2,y1,y2。

【问题讨论】:

    标签: python selenium svg xpath css-selectors


    【解决方案1】:

    要获得 x,您可以使用:(类似地为 y , z 等做)

    driver.find_element_by_tag_name('line').get_attribute("x")
    

    你可以得到任何元素的属性,x、y等不是坐标而是那个元素的属性

    【讨论】:

      【解决方案2】:

      &lt;line&gt; 属性与来自SVG 命名空间的 元素相关联。举个例子:

      <svg height="210" width="500">
        <line x1="0" y1="0" x2="200" y2="200" style="stroke:rgb(255,0,0);stroke-width:2" />
      </svg>
      

      要打印 x1 坐标的值,您可以使用以下任一Locator Strategies

      • 使用CSS_SELECTOR:

        print(driver.find_element(By.CSS_SELECTOR, "svg line").get_attribute("x1"))
        
      • 使用XPATHname()

        print(driver.find_element(By.XPATH, "//*[name()='svg']//*[name()='line']").get_attribute("x1"))
        
      • 使用XPATHlocal-name()

        print(driver.find_element(By.XPATH, "//*[local-name()='svg']/*[local-name()='title']").get_attribute("x1"))
        

      理想情况下,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

      • 使用CSS_SELECTOR

        print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.name[title='Download']"))).get_attribute("x1"))
        
      • 使用XPATHname()

        print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[name()='svg']//*[name()='line']"))).get_attribute("x1"))
        
      • 使用XPATHlocal-name()

        print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[local-name()='svg']/*[local-name()='title']"))).get_attribute("x1"))
        
      • 注意:您必须添加以下导入:

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

      参考文献

      您可以在interacting with SVG element 上找到一些相关讨论:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-12
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        • 2019-11-30
        • 2018-06-30
        相关资源
        最近更新 更多