我点击按钮有问题。如果敌人在场,此按钮可以点击,如果敌人外出则无法点击 开始 我试过这个:
try:
element= driver.find_element_by_xpath("//button[@class='butwb']")
if element.is_displayed():
print ("Element found")
else:
print ("Element not found")
except NoSuchElementException:
print("No element found")
结果:
Element not found
如果我添加element.click()
:
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
我做错了什么?
答案 0 :(得分:1)
此错误消息......
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
...暗示您尝试互动的元素不可见。
标识元素的以下代码行是成功的,因为该元素存在于HTML DOM中:
element= driver.find_element_by_xpath("//button[@class='butwb']")
此时值得一提的是,元素的存在意味着该元素存在于页面的DOM上。这并不意味着元素可见(即显示)或可互动(即可点击)。
可见性表示该元素不仅会显示,而且其高度和宽度也会大于0.
因此 is_displayed()
方法返回 false 并执行else{}
块打印:
Element not found
此外,当您调用 click()
时,会引发以下异常:
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
您采用的定位器策略无法识别该元素,因为它不在浏览器的Viewport内。
您采用的定位器策略并非唯一标识 HTML DOM 中的所需元素,并且当前找到其他元素隐藏 / 隐藏元素。
您采用的定位器策略标识了元素,但由于属性 style =“display:none;”的存在而不可见。
WebElement 可能出现在模态对话框中,可能无法立即显示/可互动。
使用execute_script()
方法滚动元素以进行查看,如下所示:
elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].scrollIntoView();", elem);
您可以在此处找到有关Scrolling to top of the page in Python using Selenium
包含您采用的定位器策略并未唯一标识HTML DOM中的所需元素,并且当前找不到其他隐藏 / 不可见元素作为您必须更改定位器策略的第一个匹配。
Incase元素具有 style =“display:none;”属性,通过executeScript()
方法删除属性,如下所示:
elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].removeAttribute('style')", elem)
elem.send_keys("text_to_send");
如果该元素在 HTML DOM 中不立即存在 / 可见 / 可互动,将WebDriverWait与expected_conditions设置为正确的方法,如下所示:
等待presence_of_element_located:
element = WebDriverWait(driver, 20).until(expected_conditions.presence_of_element_located((By.XPATH, "element_xpath']")))
等待visibility_of_element_located:
element = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "element_css")
element = WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, "element_link_text")))
答案 1 :(得分:0)
在与Kuncioso交谈并进入游戏后,我们发现有两个按钮与他的定位器匹配,第一个被隐藏。使用下面的代码解决问题,点击第二个按钮,即他想要的按钮。
driver.find_elements_by_xpath("//button[@class='butwb']")[1].click()