【问题标题】:Double click on text using Selenium and Python使用 Selenium 和 Python 双击文本
【发布时间】:2017-08-09 11:57:00
【问题描述】:

如何让 Selenium 双击“Res.”来自下面的html:

<g class = "text">
    <text x="0" y="0">
        <tspan x="24" y="43" data-chunk-id="0">Cardiovasc </tspan>
        <tspan x="93.025390635" y="43" data-chunk-id="1">Res. </tspan>
    </text>

当我运行以下代码时,我很接近:

word = browser.find_element_by_xpath("//*[contains(text(), 'Res.')]")
actionChains = ActionChains(browser)
actionChains.double_click(word).perform()

“Cardiovasc”是在网站上双击的内容。 如何使我的元素更具体,以便在 Res. 上双击? 我的最终目标是突出显示文本,但我首先需要让 selenium 指向正确的位置。

更新 当我打印元素的文本时,它是正确的,但问题是句子中每个单词的位置都是相同的。

>>> print(word.text)
Res.
>>> print(word.location)
{'x': 33, 'y': 117}

如果我将元素设置为“Res.”之前的“Cardiovasc”一词

word = browser.find_element_by_xpath("//*[contains(text(), 'Cardiovasc')]")

我得到它指向正确的单词但位置相同:

>>> print(word.text)
Cardiovasc
>>> print(word.location)
{'x': 33, 'y': 117}

我也尝试在唯一 id 上查找元素但得到相同的结果:

word = browser.find_element_by_xpath("//*[@data-chunk-id='1']")

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    我通过更改 Selenium 版本并更改为旧版本的 Firefox 来解决此问题。此外,我必须在我的“2015 年初”MacbookAir 而不是我的 2017 MacbookPro 上运行此代码(这个问题可能可以通过设置屏幕分辨率来解决)。

    这是我使用的版本:

    硒 3.1.0

    火狐 47.0.2

    Gecko 驱动程序(我在环境中安装了 v0.12-15。)

    【讨论】:

      【解决方案2】:

      为了选择您可以尝试的特定 tspan 元素:

      word = browser.find_element_by_xpath("//tspan[contains(., 'Res.')]")
      

      或直接测试内容(忽略任何前导/尾随空格):

      word = browser.find_element_by_xpath("//tspan[normalize-space(.)='Res.']")
      

      【讨论】:

      • 感谢您的回复。但是这两个都给出了类似的错误消息:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//tspan[normalize-space (.)='Res.']"}
      • @Ziska220 真的是元素tspan
      • 啊,它在 SVG 图像中 - 这可能会有所帮助://*[local-name() = 'svg']//tspan[normalize-space(.)='Res.']
      • 嗯仍然给出错误。它也在“g”和“text”元素中。我应该包括那些吗?
      • // 应该解决这个问题(它选择任何后代,而不仅仅是直系子女),但似乎必须更详细://*[local-name() = 'svg']//*[local-name() = 'tspan' and normalize-space(.)='Res.']
      猜你喜欢
      • 2013-07-26
      • 2016-05-29
      • 2021-12-26
      • 1970-01-01
      • 2015-08-28
      • 2020-02-13
      • 1970-01-01
      • 2018-12-15
      • 2017-03-26
      相关资源
      最近更新 更多