【问题标题】:Select element with style tag and text in Selenium在 Selenium 中选择带有样式标签和文本的元素
【发布时间】:2019-08-15 10:20:30
【问题描述】:

我最初要求一种空样式和 ::before css 的组合,但 Selenium 似乎无法识别 css。

所以我发布了一段较大的 html 并要求另一种组合:样式为空和文本后跟样式。这将是 style="">完全访问权限

这是扩展的html:

<span class="highwire-citation-access highwire-citation-access-check" data-pisa-id="sci;science.aav1483" data-atom-uri="/sci/363/6422/eaav1483.atom" data-request-view="full">
<i class="highwire-access-icon highwire-access-icon-user-access user-access fa fa-unlock-alt" title="Full Access" aria-hidden="true" style=""></i>
<span class="element-invisible highwire-access-icon highwire-access-icon-user-access" style="">Full Access</span>
<i class="highwire-access-icon highwire-access-icon-no-access no-access fa fa-lock" title="Restricted Access" aria-hidden="true" style="display:none;"></i>
<span class="element-invisible highwire-access-icon highwire-access-icon-no-access" style="display:none;">Restricted Access</span></span>
<i class="highwire-access-icon highwire-access-icon-user-access user-access fa fa-unlock-alt" title="Full Access" aria-hidden="true" style=""></i>
<span class="element-invisible highwire-access-icon highwire-access-icon-user-access" style="">Full Access</span>
<i class="highwire-access-icon highwire-access-icon-no-access no-access fa fa-lock" title="Restricted Access" aria-hidden="true" style="display:none;"></i>
<span class="element-invisible highwire-access-icon highwire-access-icon-no-access" style="display:none;">Restricted Access</span>

python相关代码:

child  = browser.find_elements(By.XPATH,(" %s" % exp))
for t in child:
    verbose = t.get_attribute('innerHTML') 

现在表达式 %s 被 xpath 替换:

 "//*[(@style='""')]/../../*"

结果是完全访问和受限访问元素。

【问题讨论】:

  • 您应该发布更大的相关 html 块,以便这里的人可以看到上下文。
  • 您会发布您正在使用的 Python 代码,而不仅仅是选择器吗?
  • 你说得对。我刚刚添加了 Python 代码和更多的 html。谢谢你们。

标签: python selenium-webdriver xpath webdriverwait xpath-1.0


【解决方案1】:

你试过了吗?

i[title="Full Access"]::before { ... }

【讨论】:

  • 谢谢,但是没有用。我正在使用 python 使用 selenium 库。它返回的错误: InvalidSelectorException: Given xpath expression " //i[title='Full Access']::before { ... }" is invalid: SyntaxError: The expression is not a legal expression。我还在 Freeformarter 网页中进行了测试,它说:无法执行 XPath 操作。超出表达式结尾的意外标记“::”
  • 您是否尝试过仅使用纯 HTML 和 CSS 的选择器?使用 W3School 的“试用”代码编辑器对我有用。听起来您的 python 包正在使用旧的 CSS 规则或不支持它。抱歉,我以为这是一个 CSS 问题,而不是 selenium 或 python。
  • 没问题。我只是在标题中添加了 selenium 和 python 以避免误解。无论如何,谢谢。
【解决方案2】:

要提取文本完全访问权限,您必须为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

  • 使用XPATH

    print(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//i[@class='highwire-access-icon highwire-access-icon-user-access user-access fa fa-unlock-alt' and @title='Full Access']//following::span[1]"))).get_attribute('innerHTML'))
    
  • 注意:您必须添加以下导入:

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

【讨论】:

  • 谢谢,但它不起作用。我对其进行了测试,并再次获得了整个元素列表。发生这种情况是因为具有受限访问权限和完全访问权限的文章具有相同的 html 代码,不同之处在于当元素可见时,样式=“”(null 或空)带有标题(或带有 css ::before)。我后来处理了这些元素。就像我知道我得到了一篇完整的文章,因为有一个部分被标记为摘要。这不是一个最佳解决方案,但现在适合我。无论如何,谢谢。
猜你喜欢
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多