input
它只是在页面加载后退出。等待完全没有效果!
演示:https://www.youtube.com/watch?v=GocfsDZFqk8&feature=youtu.be
任何帮助将不胜感激。
答案 0 :(得分:2)
如果您想暂停10秒钟,请使用time.sleep()
:
import time
time.sleep(10) # take a pause 10 seconds
注意: WebDriverWait(driver,10)
不能那样工作。相反,您可以像这样使用它:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# this will wait at least 10 seconds until url will contain "your_url"
WebDriverWait(driver, 10).until(EC.url_contains(("your_url")))
,但不会等到10秒钟,直到满足expected_conditions
为止。
还: ,正如我们告诉的源代码:
def implicitly_wait(self, time_to_wait):
"""
Sets a sticky timeout to implicitly wait for an element to be found,
or a command to complete. This method only needs to be called one
time per session. To set the timeout for calls to
execute_async_script, see set_script_timeout.
:Args:
- time_to_wait: Amount of time to wait (in seconds)
:Usage:
driver.implicitly_wait(30)
"""
...
driver.implicitly_wait(10)
也用于等待元素,而不是暂停脚本。
PS: :使用WebDriverWait
而不是硬暂停始终是一个好习惯,因为有了WebDriverWait
,您的测试会更快,因为您不必等待整个时间,而只需等到expected_conditions
就可以了。据我了解,您目前只是在玩游戏,但将来WebDriverWait
更好用。
答案 1 :(得分:1)
使用此WebDriverWait(driver,10)
,您已经声明了显式等待。这只是声明,您根本没有使用显式等待。
要使用显式等待,您必须将以上代码与 EC 绑定,即Expected condition
。
类似:
wait = WebDriverWait(driver,10)
element = wait.until(EC.element_to_be_clickable((By.NAME, 'q')))
element.send_keys("Hi Google")
您可以参考此链接进行明确等待:Explicit wait
请注意,time.sleep(10)
是worst/extreme
类型的显式等待,它将条件设置为确切的等待时间。提供了一些方便的方法,可以帮助您编写仅等待所需时间的代码。将WebDriverWait与ExpectedCondition结合是实现此目的的一种方法。
答案 2 :(得分:1)
因此,我们遇到了同样的问题,我们所做的就是用装饰器修改selenium中的驱动程序类,使其在get_driver()函数中修改的函数上睡眠0.44秒。在这种情况下,我们希望在硒输入所需的内容之前等待通过类,名称和ID查找元素。像魅力一样工作。
def sleep_decorator(func):
def wrapper(*args, **kwargs):
time.sleep(.44) # Added side-effect
return func(*args, **kwargs) # Modified return
return wrapper
def get_driver():
driver = webdriver.Chrome()
driver.find_element_by_id = sleep_decorator(driver.find_element_by_id)
driver.find_element_by_name = sleep_decorator(driver.find_element_by_name)
driver.find_element_by_class_name = sleep_decorator(driver.find_element_by_class_name)
driver.find_elements_by_id = sleep_decorator(driver.find_elements_by_id)
driver.find_elements_by_name = sleep_decorator(driver.find_elements_by_name)
driver.find_elements_by_class_name = sleep_decorator(driver.find_elements_by_class_name)
return driver