按xpath查找元素并单击它

时间:2016-12-20 08:04:28

标签: python selenium selenium-webdriver selenium-chromedriver

我正在尝试在页面上加载完整的图像列表。页面上有一个“显示更多”按钮。我想点击它直到所有图像都被加载。

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()

但它给出了错误:

  

无效的选择器:不允许使用复合类名称

2 个答案:

答案 0 :(得分:1)

复合/多个类不能用于“按类名”定位器。您必须在定位器中留下一个类:

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

或者,使用不同的策略,例如一个CSS选择器:

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

请注意,我只留下一个“show-more-cta”类 - 它是一个不错的选择,因为它为定位器带来了价值和意义,使其可读。另一方面,bottom-btnga类在这种情况下没有任何实质意义 - 这些类是面向布局/设计/标记的。

答案 1 :(得分:0)

尝试使用相对XPath而不是绝对XPathclass_name进行搜索:

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

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