Каковы свойства find_element_by_class_name в selenium python?
browser = webdriver.Firefox()
browser.get(url)
divs = browser.find_elements_by_class_name('class')
Есть ли какие-нибудь свойства browser.find_element_by_class_name('class')?
Например, если у меня есть такой код:
<div class="foo">
<a href="" class="poo">one</a>
<a href="" class="poo">two</a>
<a href="" class="poo">three</a>
</div>
<div class="foo">
<a href="" class="koo">one</a>
<a href="" class="koo">two</a>
<a href="" class="koo">three</a>
</div>
Я хочу получать текст из тегов "а". Но сначала я хочу получить дивы. так что я делаю что-то вроде этого:
divs = browser.find_elements_by_class_name('foo')
А теперь я хочу получить все теги "a" из моего массива div. Является ли это возможным?
2 ответа
Решение
Вы можете находить элементы в элементе, извлекать их с помощью вложенного цикла:
divs = browser.find_elements_by_class_name('foo')
for div in divs:
elements = div.find_elements_by_tag_name('a')
for element in elements:
print(element.text)
CLASS_NAME
CLASS_NAME
- это одна из поддерживаемых Selenium стратегий локаторов, а также свойство интерфейса WebElement, которое получает и устанавливает значениеclass
атрибут указанного элемента.
Чтобы получить тексты из<a>
теги с родительским <div>
теги, вы можете использовать любую из следующих стратегий локатора:
С помощью
CLASS_NAME
:print([my_elem.text for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "koo")))])
С помощью
CSS_SELECTOR
:print([my_elem.text for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.foo a.koo")))])
С помощью
XPATH
:print([my_elem.text for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='foo']//a[@class='koo']")))])