Я пробовал этот код:
driver.get('https://www.bungol.ca/map/location/scarborough/?')
time.sleep(3)
refresh_count = 0
while True:
try:
driver.refresh()
# WebDriverWait(driver, 120).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".gm-style > iframe:nth-child(2)")))
el = driver.find_element_by_css_selector(".gm-style > iframe:nth-child(2)")
assert el.is_displayed()
refresh_count += 1
except Exception:
print("Refresh count = " + str(refresh_count))
И вывод был:
Refresh count = 0
Refresh count = 43
Refresh count = 44
Refresh count = 56
Refresh count = 62
Refresh count = 63
Refresh count = 64
Refresh count = 68
Refresh count = 69
iframe
не было в DOM
в 0, 43, 44, .... Первый раз это не удалось из-за долгой первой загрузки. Тогда это было хорошо, и я решил смоделировать медленное соединение, переключив Chrome
на мобильную версию. А потом это уже не часто относительно.
И тогда я установил WebDriverWait
:
while True:
try:
driver.refresh()
WebDriverWait(driver, 120).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".gm-style > iframe:nth-child(2)")))
el = driver.find_element_by_css_selector(".gm-style > iframe:nth-child(2)")
assert el.is_displayed()
refresh_count += 1
except Exception:
print("Refresh count = " + str(refresh_count))
и это не исключение. Так что вы можете использовать EC.presence_of_element_...