我意识到这是一个相对简单的问题,但我还没有找到答案。
我在for循环中使用driver.get()
,该循环遍历一些url。为了避免我的IP地址被阻塞,我在for循环中的driver.get statement
之前实现了time.sleep(5)
。
基本上,我只想等待一段时间,让我的刮痧看起来更自然。
我认为time.sleep
可能会导致页面崩溃。硒中time.sleep
的当量是多少?据我所知,implicitly_wait
只是设置了抛出异常之前的时间,但我不确定这是我想要的吗?我希望司机有一段特定的等待时间。
time.sleep((
sleep((函数来自时间模块,该模块将当前线程的执行挂起给定的秒数。
现在,WebDriver是一个进程外库,它指示浏览器执行什么,同时web浏览器本质上是异步的,WebDrivers无法跟踪HTML DOM的活动实时状态。这会导致使用Selenium和WebDriver时出现一些间歇性问题,这些问题受到浏览器和用户指令之间出现的竞争条件的影响。
到目前为止,Selenium没有任何与time.sleep()
相同的方法,但有两种等效的方法可供您使用,可以根据您的自动测试的主要条件使用。
-
隐式等待:在这种情况下,WebDriver在试图查找任何元素时会轮询DOM一段时间。当网页上的某些元素不能立即可用并且需要一些时间加载时,这可能很有用。
def implicitly_wait(self, time_to_wait) -> None: """ 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) """ self.execute(Command.SET_TIMEOUTS, { 'implicit': int(float(time_to_wait) * 1000)})
-
显式等待:这种类型的等待允许代码停止程序执行或冻结线程,直到传递的条件解决为止。例如:
- presence_of_element_located((
- 元素类别的可见性((
- element_to_be_clickle((
Selenium中没有像time.sleep()
通用Python方法那样的用于硬编码暂停的特定方法
正如您所提到的,有一个implicitly_wait
和预期条件显式WebDriverWait
等待,但这两个都不是硬编码的暂停implicitly_wait
和WebDriverWait
都用于设置超时-轮询某个元素存在或条件的时间,因此,如果满足该条件或元素出现,程序流将立即继续到下一个代码行
因此,如果您想暂停,您必须使用一些通用的Python方法,该方法将暂停程序/线程运行,如time.sleep()
。