使用Selenium python,在等待隐藏的btn出现并可单击时是否需要刷新页面?
我正在尝试制作一个小程序,它通过一个隐藏按钮(在类中使用hide)查看网页,并在单击之前等待其可单击。代码如下。我想知道使用Selenium python,在等待隐藏的btn出现并可单击时是否需要刷新页面?,python,selenium-webdriver,webdriverwait,expected-condition,Python,Selenium Webdriver,Webdriverwait,Expected Condition,我正在尝试制作一个小程序,它通过一个隐藏按钮(在类中使用hide)查看网页,并在单击之前等待其可单击。代码如下。我想知道WebDriverWait和元素是否可以单击功能是否已经通过刷新内容来实现,或者我是否需要手动刷新页面 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import NoSuchElementExcepti
WebDriverWait
和元素是否可以单击
功能是否已经通过刷新内容来实现,或者我是否需要手动刷新页面
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.common.exceptions import WebDriverException
driver = webdriver.Firefox()
driver.get(<URL>)
print("beginning 120s wait")
time.sleep(120)
print("finished 120s wait")
try:
element = WebDriverWait(driver, 1000).until(
EC.element_to_be_clickable((By.CLASS_NAME, "btn add"))
)
print("It went through")
element.click()
driver.execute_script("alert('It went through!');")
finally:
driver.execute_script("alert('Did it work?');")
很抱歉,如果这个问题在其他地方得到了回答,我搜索了很多,但是我在这个网站上没有找到答案。首先,你不应该使用
睡眠带有正确EC
的WebDriverWait
就可以了
对于可点击的EC.element\u,这是函数背后的代码:
def element_to_be_clickable(locator):
""" An Expectation for checking an element is visible and enabled such that
you can click it."""
def _predicate(driver):
element = visibility_of_element_located(locator)(driver)
if element and element.is_enabled():
return element
else:
return False
return _predicate
如您所见,EC.元素可点击
功能不会刷新浏览器
如果您坚持需要刷新,正确的实现方法是:
try:
element = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CLASS_NAME, "btn add"))
except (NoSuchElementException, StaleElementReferenceException):
driver.refresh()
element = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CLASS_NAME, "btn add"))
我认为刷新对隐藏元素没有帮助…因此,EC.element\u to\u be\u clickable不需要刷新就可以了?是的,先生!元素可点击
只需等待X个时间量,直到元素完全可见,然后启用。好吧,我就是这么理解的,但我想我不知道这些页面实际上是如何更新的。如果某个元素/按钮被启用,它是否会实时发生?假设有一个灰色的按钮。前端开发人员如何改变事情以使更改生效?那个“更新”是不需要刷新页面就可以显示出来,还是会突然出现在我们这边?我正在等待的按钮就是这样的功能。我不认为它只是有逻辑要求它在React中等待某个条件,尽管我可能错了。因此,启用按钮时无需刷新?@infinity8房间通常会有一些回调功能(或侦听器)来启用按钮,例如,如果有必填字段需要填充,则在填充所有必填字段之前,提交按钮将被禁用。在大多数情况下,不仅刷新不会使按钮处于启用状态,而且您将失去使其处于启用状态的条件。等待EC
将等待该反应发生。希望这对你有帮助…我有,谢谢你!我提供的有问题的按钮不会响应用户所做的任何操作而激活。
try:
element = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CLASS_NAME, "btn add"))
except (NoSuchElementException, StaleElementReferenceException):
driver.refresh()
element = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CLASS_NAME, "btn add"))