2

Я пытаюсь загрузить полный список изображений на странице. На странице есть кнопка «Показать больше». Я хочу щелкнуть его, пока все изображения не будут загружены.Найти элемент по xpath и нажать на него

HTML:

<li class="show-more-row"> 
    <button class="show-more-cta bottom-btn ga"data-ga-action="click"data-ga-label="category-see-more:SectionCourses>Show More 
     <i class="lyndacon arrow-down"></i> 
    </button> 
</li> 

Я до пытался получить элемент по Xpath. Но он постоянно меняется каждый раз, когда я нажимаю кнопку.

Пример:

//*[@id="category-courses"]/li[101]/button и //*[@id="category-courses"]/li[151]/button

Я также попытался найти элемент по имени класса:

while(browser.find_element_by_class_name("show-more-cta bottom-btn ga")): 
    moreElem = browser.find_element_by_class_name("show-more-cta bottom-btn ga") 
    moreElem.click() 

Но это дает ошибку:

invalid selector: Compound class names not permitted

+1

Попробуйте просто показать больше-cta. Ошибка, которую вы получаете, исходит из того, что в имени класса есть пробелы. Это означает, что существует составной класс –

+0

. Вы также можете просмотреть поиск с помощью CSS-селектора. Я считаю, что это позволяет вам справиться с проблемой сложного класса. –

ответ

0

Попробуйте использовать поиск по относительным XPath вместо b у абсолютных XPath или путем class_name:

browser.find_element_by_xpath("//button[@class='show-more-cta bottom-btn ga']") 

или

browser.find_element_by_xpath("//button[.='Show More']") 
+0

Лучший способ использовать cssSelector здесь как 'button.show-more-cta.bottom-btn.ga' –

+0

Вы не можете дать правильный ответ .. :) –

+0

@SaurabhGaur , может быть несколько причин использовать 'CSS selector' вместо' XPath', но вопрос звучит как 'Найти элемент по xpath ...' – Andersson

1

Соединение/несколько классов не могут быть использованы в "по имени класса" локатора. Вы должны либо оставить один класс в локаторе:

browser.find_element_by_class_name("show-more-cta") 

Или, используйте другую стратегию, например. селектор CSS:

browser.find_element_by_css_selector(".show-more-cta.bottom-btn.ga") 

Обратите внимание, что я бы просто оставить один «шоу-более-CTA» класс - это хороший выбор, так как это приносит ценность и значение локатора делает его доступным для чтения. bottom-btn и ga классы, с другой стороны, в этом случае не имеют существенного значения - эти классы ориентированы на макет/дизайн/разметку.

+1

Да, это должно быть принято answer ... :) –

Смежные вопросы