Python Selenium ожидает изменения атрибута веб-элемента в цикле
Я пытаюсь использовать Selenium с Chrome в Python 3.7, чтобы дождаться раскрытия элемента после имитации щелчка.
<div id = itemArea>
<div> Heading 1
<a aria-expanded = "False">
<span> Expanded Area 1 <span>
</a>
</div>
<div> Heading 2
<a aria-expanded = "False">
<span> Expanded Area 2 </span>
</a>
</div>
<!-- More divs to expand... -->
</div>
Поскольку базовые элементы не имеют уникальных идентификаторов или классов, я получаю itemArea
div в виде списка, а затем попробуйте перебрать его в цикле for.
# Get button with div itemArea as the parent
itemArea = driver.find_elements(By.CSS_SELECTOR, 'div[id = itemArea] > div')
# For each element, get the anchor element and click it
for elem in itemArea:
elemBtn = elem.find_element(By.CSS_SELECTOR, 'a')
elemBtn.click()
# Code to wait for aria-expanded = "True"
doStuff
понятно EC.presence_of_element_located((By.ID, "myDynamicElement"))
из https://selenium-python.readthedocs.io/waits.html?highlight=EC. Но этот метод использует драйвер.
Как я могу передать свой elem
из цикла для этого метода ЕС?
Что-то вроде: EC.presence_of_element_located((elem.find_element(By.ID, "a[aria-expanded = true]")))
,
Это однако, возвращает InvalidArgumentException: Message: invalid argument: 'using' must be a string
,
Или, может быть, есть лучший подход?