使用Selenium和Python提取div文本无输出该如何解决?
问题原因
- 类名参数带了多余的尾部空格:调用
find_elements_by_class_name时传入的类名末尾多了空格,Selenium会将空格判定为类名的一部分,无法和实际页面的类名匹配,导致获取不到元素。 - 缺少页面加载等待逻辑:网页元素是动态渲染的,调用
driver.get后直接执行元素定位逻辑时,目标元素还未加载完成,返回的元素列表为空,遍历无输出。 - 已废弃的定位语法:当前使用的
find_elements_by_class_name是Selenium 3版本的旧语法,Selenium 4.0及以上版本已经不再支持该写法,会出现定位失效问题。
修正后代码
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 url = 'https://www.bet365.com/#/AVR/B146/R^1' driver = webdriver.Chrome() driver.get(url) # 显式等待最多10秒,直到目标元素加载完成 wait = WebDriverWait(driver, 10) # 提取Registre-se文本 join_ele = wait.until(EC.visibility_of_element_located((By.CLASS_NAME, 'hm-MainHeaderRHSLoggedOutNarrow_Join'))) print(join_ele.text) # 提取Login文本 login_ele = wait.until(EC.visibility_of_element_located((By.CLASS_NAME, 'hm-MainHeaderRHSLoggedOutNarrow_Login'))) print(login_ele.text) driver.quit()
补充说明
如果还是出现定位失败的情况,可以替换为CSS选择器定位,兼容性更强:
join_ele = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.hm-MainHeaderRHSLoggedOutNarrow_Join'))) login_ele = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.hm-MainHeaderRHSLoggedOutNarrow_Login')))
内容的提问来源于stack exchange,提问作者Black Coral
相关产品推荐
相关产品推荐

