Python Selenium: ожидание загрузки одного элемента ИЛИ другого элемента - PullRequest
0 голосов
/ 05 января 2019

Я использую этот код для ожидания загрузки элемента:

browser = webdriver.Chrome(executable_path=chromedriver,options=ChromeOpts, desired_capabilities=captain) 
wait = WebDriverWait(browser, 5)
openbrowser = browser.get(url) 
wait.until(EC.presence_of_element_located((By.ID, 'h1')))
browser.execute_script("window.stop();")

Однако, что мне действительно нужно, это ждать одного элемента ИЛИ другого. Так что я могу, например, дождаться 'h1' ИЛИ ​​'rf-footer'.

спасибо,

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Я купил его, используя TRY / EXCEPT.

openbrowser = browser.get(url) #navigate to the page 
try: 
   wait.until(EC.presence_of_element_located((By.ID, id_stop))) 
except: 
   wait.until(EC.presence_of_element_located((By.ID, 'rf-footer')))
browser.execute_script("window.stop();")
0 голосов
/ 05 января 2019

Вы можете объединить две проверки в одной операции wait() - используя лямбда-выражение python, склеив две проверки вместе с or:

# the imports for expected_conditions and By modules
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait.until(lambda x: EC.presence_of_element_located((By.ID, "id1")) or EC.presence_of_element_located((By.ID, "id2")))

Вы можете использовать этот подход даже для того, чтобы получить элемент, который сопоставляется первым - или, если вы не хотите использовать ExpectedConditions:

element = wait.until(lambda x: x.find_elements_by_id("id1") or x.find_elements_by_css_selector("#id2"))[0]

Этот подход дает преимущество, когда ожидание прекратится сразу после одного из двух проходов - например, скорость.
По сравнению с блоком try-catch - в нем должно произойти сбой первого условия (ожидание до X секунд, обычно 10), для проверки второго; поэтому, если первое значение равно false, а второе - значение true, время выполнения / ожидания будет составлять не менее X секунд плюс время, необходимое для второй проверки.
В худшем случае, когда оба значения ложные, вы ожидаете 2-кратного ожидания по сравнению с X при их объединении. Если вы добавите другие условия, вы только увеличите коэффициент.

0 голосов
/ 05 января 2019

Вы можете сделать это, используя expected_conditions

from selenium.webdriver.support import expected_conditions

полное решение можно найти здесь: Селен Ожидаемые условия - можно использовать 'или'?

...