Selenium等待两种情况之一出现

2024-04-23 13:40:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用Python编写的Selenium脚本。我尝试访问的网页将有两种可能的结果之一:

  1. 或者,它没有所需的数据,在这种情况下,它将打印出特定的文本(例如,“datanotfound”)
  2. 或者,它将拥有所需的数据并将其加载到我可以通过ID访问的元素中(比如“dataID”)

我需要等待这些条件中的任何一个成为真。如果满足这些条件中的任何一个,我将简单地提取页面源并退出。在

我可以分别等待以下条件:

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秒,如果第一个条件不满足,那么我将移动一个来查找第二个条件。但可能第一个条件是真的,在第十一秒就实现了。在这种情况下,我的脚本永远不会知道第一个条件已经实现。如果我切换两个wait语句的顺序,那么问题仍然存在,因为现在我仍然不确定要等多久才能使新的第一个条件为真。在

这种方法的另一个问题是,即使第二个条件在2-3秒内得到满足,它也要等待10秒才能满足第一个条件。因此,当网页的第二个条件为真时,会浪费等待时间。在

所以,我需要写一个等待,等待这两个条件中的任何一个为真。在

我回顾了其他几个Stackoverflow问题,并试图想出一个解决方案,但我没能解决。我尝试用逗号(,)或| |或or关键字组合这两个条件。但这些都不能解决问题。在

有人能给我指一下正确的方向吗?在


Tags: 数据脚本id网页driverselenium情况页面
1条回答
网友
1楼 · 发布于 2024-04-23 13:40:02

您可以使用CSS_SELECTORor等待其中一个条件

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。在

相关问题 更多 >