我正试图从维基百科中抽出一张桌子。当我尝试使用以下driver.find_element_by_class_name(name)
拉动它时,它将不起作用。但是,当转到html源代码时,我可以显式查看要查找的类名。
我确实意识到还有其他方法可以提取此表,并且我已经转向了更简单的方法。我很好奇为什么Selenium在HTML中找不到该类。
from selenium import webdriver
driver = webdriver.Chrome(r"\chromedriver_win32\chromedriver.exe")
driver.get(r'https://en.wikipedia.org/wiki/List_of_airports_in_the_United_States')
driver.implicitly_wait(2)
driver.find_element_by_class_name(name='wikitable sortable jquery-tablesorter')
但是,我得到的错误是
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".wikitable sortable jquery-tablesorter"}
(Session info: chrome=75.0.3770.142)
答案 0 :(得分:2)
要处理动态元素,请使用WebdriverWait
和visibility_of_element_located
并跟随css选择器。
WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,".wikitable.sortable.jquery-tablesorter")))
您需要导入以下内容。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
如果要打印表的值。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(r"\chromedriver_win32\chromedriver.exe")
driver.get(r'https://en.wikipedia.org/wiki/List_of_airports_in_the_United_States')
print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,".wikitable.sortable.jquery-tablesorter"))).text)
答案 1 :(得分:1)
wikitable sortable jquery-tablesorter
是3个类名:Wikitable,sortable和jquery-tablesorter。 .find_element_by_class_name()
仅采用由单个类名组成的单个参数,例如.find_element_by_class_name("wikitable")
。根据该类名是否唯一地找到所需的元素,可能会找到所需的元素。
另一种选择是使用CSS选择器,以便您可以在单个定位器中使用所有三个类,例如
.wikitable.sortable.jquery-tablesorter
其中.
表示CSS选择器语法中的类名称。有关CSS选择器及其语法的更多信息,请参见下面的CSS选择器参考。
答案 2 :(得分:-1)
请直接在函数find_element_by_class_name()
中使用类名。因此,与其像这样写:
driver.find_element_by_class_name(name='wikitable sortable jquery-tablesorter')
请这样写:
driver.find_element_by_class_name('wikitable sortable jquery-tablesorter')
希望它会有所帮助:)