我在Python中有一个Selenium脚本。我尝试访问的网页将有两种可能的结果之一:
我需要等待其中任何一个条件成立。如果满足任何这些条件,我将简单地提取页面源并退出。
我可以单独等待以下条件:
element1 = WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.ID, "nodataID"), "data not found"))
if element1:
content = driver.page_source.encode('utf-8')
driver.quit()
element2 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "dataID")))
if element2:
content = driver.page_source.encode('utf-8')
driver.quit()
这意味着Selenium将首先等待网页是否没有所需的数据。在这种情况下,它将获取页面源并退出。但是如果不满足这个条件,那么它将继续等待另外10秒,看看是否满足第二个条件。
这种方法的问题是我不确定第一个条件,如果是真的,将在10秒内得到满足。也就是说,我可能会等待10秒钟,如果第一个条件不满足,那么我将移动一个来寻找第二个条件。但情况可能是第一个条件实际上是真的,它在第11秒实现了。在这种情况下,我的脚本永远不会知道第一个条件已经实现。如果我切换两个等待语句的顺序,那么问题仍然存在,因为现在我仍然不确定等待新的第一个条件为真的多长时间。
这种方法的另一个问题是,即使第二个条件在2-3秒内实际得到满足,它也会等待10秒钟以满足第一个条件。因此,当网页的第二个条件成立时,会浪费等待时间。
所以,我需要能够写一个等待两个条件中的任何一个的等待。
我回顾了其他几个Stackoverflow问题并尝试提出解决方案,但我无法解决。我尝试将2个条件与逗号(,)或||组合在一起或OR关键字。但这些都没有解决问题。
有人可以指出我正确的方向吗?
答案 0 :(得分:2)
您可以使用CSS_SELECTOR
or
等待其中一个条件
WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#nodataID, #dataID")))
content = driver.page_source.encode('utf-8')
driver.quit()
您也不需要if element
检查。如果预期条件失败,它将抛出TimeoutException
。