【问题标题】:How to select this element (in Python)如何选择这个元素(在 Python 中)
【发布时间】:2021-11-08 10:34:18
【问题描述】:

我正在尝试使用 Python 中的 Selenium 在这个 action-button 类上获取选择器,但通过使用 Javascript 文档 QuerySelector。这意味着通过 WebDriver 执行一些 js 代码,看起来像这样:

    printBtnlast = driver.execute_script(
                "return document.querySelector('print-preview-app')...('controls').querySelector({WHAT_TO_DO_HERE?})"
    )

(用'...'省略以显示主要思想)

到目前为止,我已经尝试过以下查询: 'cr-button[class='action-button']',出乎意料地给出了Message: javascript error: missing ) after argument list

为了访问下图中的action-button,我可以在 {WHAT_TO_DO_HERE?} 中放置什么?

【问题讨论】:

  • 我很抱歉@cruisepandey,我应该跟进最后一个问题。在我之前的问题上,您的帮助是必不可少的。您的代码存在一个问题,但我对其进行了修改,因此剩下的就是最后一个问题。进行此更改后,我接受了答案。再次感谢。

标签: javascript python selenium selenium-webdriver


【解决方案1】:

为此

  printBtnlast = driver.execute_script(
                "return document.querySelector('print-preview-app')...('controls').querySelector({WHAT_TO_DO_HERE?})"
    )

你可以试试这个:

printBtnlast = driver.execute_script("return document.querySelector('div.controls > cr-button.action-button')")

printBtnlast = driver.execute_script("return document.querySelector('cr-button.action-button')")

【讨论】:

  • 刚试过这个,它给了我javascript error: Unexpected token '.'
  • 刚刚从@Muhteva 那里得到了我的回答,但只是好奇,'>' 运算符在你的问题中是做什么的?
  • '>' 查找直接子代而不是递归查找。
【解决方案2】:

query Selector 语法与XPath 语法略有不同。您可以使用CSS Selectors 来定位元素。找到按钮的一种方法:

querySelector("cr-button.action-button")

由于您没有提供,因此我无权访问该页面,但可能存在多个元素具有给定路径的情况。那么其他解决方案可能是:

querySelector("div.controls > cr-button.action-button")

由于引号,您尝试的查询可能会出错。你可以试试这个:

'cr-button[class="action-button"]'

这应该可行:

printBtnlast = driver.execute_script("return document.querySelector('.controls > .action-button')")

【讨论】:

  • 你的最后一点让我得到了正确的答案:'cr-button[class="action-button"]' 对我不起作用,因为 "" 包装了整个 JS 语句。但我能做的是使用:'cr-button[class=\"action-button\"]' 这有效。
猜你喜欢
  • 2018-04-02
  • 1970-01-01
  • 2011-10-30
  • 2021-12-30
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
相关资源
最近更新 更多