Python selenium scraper 总是返回空列表

问题描述 投票:0回答:2

即使明显存在具有指定类名的元素,以下代码也始终返回空列表:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.chrome.service import Service as ChromeService 
from webdriver_manager.chrome import ChromeDriverManager 
 
# instantiate options 
options = webdriver.ChromeOptions() 
 
# run browser in headless mode 
options.headless = True 
 
# instantiate driver 
driver = webdriver.Chrome(service=ChromeService( 
    ChromeDriverManager().install()), options=options) 
 
# load website 
url = 'https://maclear.ch/en/projects' 
 
# get the entire website content 
driver.get(url) 
 
# select elements by class name 
elements = driver.find_elements(By.CLASS_NAME, 'project-info__elem') 
print(elements)

我希望得到指定的元素

python selenium-webdriver beautifulsoup
2个回答
0
投票

看起来网站正在动态加载内容(使用JS),Selenium找不到元素,因为它不等待页面加载并立即开始执行指令。

此代码等待该元素加载,然后返回它。

from selenium.webdriver.support.wait import WebDriverWait 

WAIT_LIMIT = 20 // seconds

elements = WebDriverWait(driver, WAIT_LIMIT ).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, ".project-info__elem"))
)

0
投票

这似乎是您试图在加载元素之前获取元素列表的情况,所以自然您会得到一个空列表。

尝试在获取 url 后添加

driver.implicitly_wait(10)
,您应该会获得一些元素。

当然,您应该研究其他更优雅的方法来等待页面加载,然后再获取元素。在所有情况下 10 秒可能都不够,而且在其他情况下可能会过长。

© www.soinside.com 2019 - 2024. All rights reserved.