Selenium发现element_by_id无法使用单选按钮

时间:2018-02-12 12:11:36

标签: python selenium radio-button

所以我一直在使用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找到元素,它就像预期的那样工作。 该错误仅发生在类型&#34; radio&#34;但始终如一。

由于完整的代码长约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>

2 个答案:

答案 0 :(得分:2)

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

enter image description here

从UI ,我们可以看到标签覆盖了单选按钮,因此您无法单击单选按钮来选择切换按钮,而是单击标签来执行此操作。 / p>

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

答案 1 :(得分:1)

尝试以下代码行:

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

希望它可以帮到你!