按类别查找命令不起作用

时间:2019-09-03 06:39:36

标签: python selenium xpath css-selectors webdriverwait

https://www.n11.com/telefon-ve-aksesuarlari/cep-telefonu-aksesuarlari

在此网站上,我试图单击(下一页按钮)

我要抓住这一行

<a href="https://www.n11.com/telefon-ve-aksesuarlari/cep-telefonu-aksesuarlari?pg=3" class="next navigation"></a>

我正在用程序编写这段代码

data=driver.find_elements_by_class_name("next navigation")

我的问题是关于这个问题的。.它不起作用

2 个答案:

答案 0 :(得分:7)

data=driver.find_elements_by_class_name()仅接受单个类名。

class="next navigation"定义了两个类,nextnavigation

因此,您只能像这样搜索nextnavigation

data = driver.find_elements_by_class_name("next")
data = driver.find_elements_by_class_name("navigation")

要使用多个类名查找元素,请使用xpath或cssSelector:Find div element by multiple class names?

data = driver.findElement(By.cssSelector(".next.navigation"));

答案 1 :(得分:-2)

你很近。使用find_element_by_class_name()时,您不能传递多个,并且您只能传递一个 classname ,即,只能传递一个以下任一类:

  • next
  • navigation

大概,仅使用一个 classname ,您将无法在DOM Tree中唯一地标识元素。

通过find_element_by_class_name()传递多个班级时,您将面对Message: invalid selector: Compound class names not permitted


要在元素上click(),必须诱使 WebDriverWait 使元素可点击,并且您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.next.navigation[href$='telefon-ve-aksesuarlari/cep-telefonu-aksesuarlari?pg=3']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='next navigation' and contains(@href,'telefon-ve-aksesuarlari/cep-telefonu-aksesuarlari?pg=3')]"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  

您可以在How to scrap data from webpage which uses react.js with Selenium in Python?

中找到相关的讨论