我正在尝试使用Selenium Webdriver和Python单击切换开关,但出现以下异常:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: chrome=86.0.4240.111)
我的HTML代码
<div _ngcontent-c7="" class="form-group">
<label _ngcontent-c7="" for="opened">Opened</label>
<div _ngcontent-c7="" class="toggle-switch">
<input _ngcontent-c7="" id="opened" name="opened" type="checkbox" class="ng-untouched ng-pristine ng-valid">
<label _ngcontent-c7="" for="opened"></label>
</div>
<span _ngcontent-c7="" class="form-control-helper">Toggle text description.</span>
</div>
我使用以下选择器,它是100%唯一的:
.toggle-switch>label[for=opened]
可能是什么问题?这是“角度”模态对话框。 我尝试了许多独特的定位器,包括XPATH和CSS,我确信这不是定位器问题。 有人有类似的问题吗?
我的Python代码:
toggle = driver.find_element_by_css_selector(".toggle-switch>label[for=opened]")
toggle.click()
谢谢。
答案 0 :(得分:1)
我现在使用的最好的防弹选项是:
toggle = driver.find_element_by_css_selector(".toggle-switch>label[for=opened]")
driver.execute_script("arguments[0].click();", toggle)
此外,有时我需要等到覆盖我的切换的元素变得不可见时:
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "my css selector")))
答案 1 :(得分:0)
您正在尝试与标签进行互动。您需要输入元素:
#remove the label from page
driver.execute_script("document.querySelector(\"strong[for='opened']\").style.visibility = 'hidden';")
toggle = driver.find_element_by_css_selector("#opened")
toggle.click()
答案 2 :(得分:-1)
为什么不尝试使用pyautogui来代替它,而是将鼠标移到toogle所在的特定坐标上并以此模拟点击?