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")
我的问题是关于这个问题的。.它不起作用
答案 0 :(得分:7)
data=driver.find_elements_by_class_name()
仅接受单个类名。
class="next navigation"
定义了两个类,next
和navigation
。
因此,您只能像这样搜索next
或navigation
:
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?
中找到相关的讨论