【问题标题】:Selenium find element_by_id not working with radio buttonsSelenium 发现 element_by_id 不适用于单选按钮
【发布时间】:2018-07-22 14:36:16
【问题描述】:

所以我一直在 Python 中使用 Selenium。我完成了我的代码(当时有效),但突然它选择不再工作。 再具体一点: 如果我尝试:

driver.find_element_by_id("leasingtrue").click()

它返回错误:

selenium.common.exceptions.ElementNotInteractableException: Message: Element <input id="leasingfalse" name="IsLeasing" type="radio"> could not be scrolled into view

另一方面,如果我通过它的 XPath 找到该元素,它会按预期工作。 该错误仅发生在“radio”类型中,但始终出现在每个类型中。

由于完整的代码大约有 600 行长,我不打算将其中的每一个都更改为 XPath。 另一个相关信息: 因为我正在使用 PyCharm,所以我可以恢复到以前肯定可以使用的版本。 但是现在,它也给了我同样的错误。有谁知道这个错误可能与什么有关?

我正在抓取的网站是:https://www.comparis.ch/autoversicherung/berechnen?carmake=41。 我正在使用 Python 2.7 和 Selenium 3.8 相关的 HTML 是:

<div class="item-selectable xsmall-6 columns">

<input data-val="true" data-val-required="Bitte wählen Sie eine Antwort aus." data-vertical-alignment="middle" id="leasingtrue" name="IsLeasing" type="radio" value="true" aria-required="true" aria-invalid="false" aria-describedby="IsLeasing-error">
<label for="leasingtrue">Ja</label>

</div>

【问题讨论】:

  • 我已经实现了睡眠定时器,也不起作用。
  • ElementNotInteractableExceptionTemporary OverlayPermanent Overlay 有更多关系。请正确进行讨论。
  • 很抱歉,但我不明白这与 XPath 可访问它而不是 id 或名称这一事实有何关系,或者这将如何解释它直到今天早上都正常工作。请给我一些关于您对上下文的想法的见解。
  • 为了使 SO 志愿者能够帮助您提供准确且有效的解决方案,您必须考虑使用您正在使用的二进制文件的版本信息更新问题,相关的 HTML 以及您的代码试验和错误堆栈跟踪。

标签: python selenium radio-button


【解决方案1】:

因为你操作的元素不是单选按钮,而是CSS + radio button + label实现的切换按钮

从用户界面,我们可以看到单选按钮被标签覆盖,所以你不能点击单选按钮来选择切换按钮,而是点击标签来做到这一点。

driver.find_element_by_css_selector("input#leasingtrue + label").click();

【讨论】:

  • 谢谢,这样就搞定了。但是由于代码在几周前工作,这是否意味着他们改变了 html 本身? (对不起,我对此很陌生..)
【解决方案2】:

尝试以下代码行:

element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "leasingfalse")))
driver.execute_script("arguments[0].scrollIntoView(true);", element)
element.click()

希望对你有帮助!

【讨论】:

  • 遗憾的是这不起作用,仍然给我同样的错误
  • 还是同样的错误。目前我很确定错误不会出现在我的代码中,而是出现在环境中。但我几乎不知道它可能是什么,因为我根本没有改变任何东西。
  • @user9349795,有道理。
猜你喜欢
  • 2020-08-26
  • 1970-01-01
  • 2018-05-17
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2020-06-29
相关资源
最近更新 更多