使用Selenium爬取网站文本内容始终返回0的问题如何解决
问题原因及修正方案
核心错误点
- 等待时机完全颠倒:你当前的代码执行顺序为
发起页面请求→立即抓取元素文本→休眠10秒→打印结果,在你抓取文本的时间点,页面的统计数据还未完成接口请求和渲染,拿到的自然是元素的初始值0,后续的10秒等待完全没有作用。 - 可选优化点:硬等待
time.sleep效率极低且不稳定,容易受网络波动影响出现加载超时依然拿不到数据的情况,更推荐使用Selenium的显式等待机制,自动判断元素加载状态。 - 兼容提示:新版本Selenium已经弃用
find_element_by_xpath系列方法,建议使用By类指定定位方式调用统一的find_element方法。
最简修复代码
直接将休眠逻辑放到页面请求之后、抓取元素之前即可验证效果:
from selenium import webdriver import time url = 'https://hytrack.me/' browser = webdriver.Chrome(r'C:\Users\kinet\OneDrive\Documents\webscraper\chromedriver.exe') browser.get(url) # 把等待逻辑移到获取元素之前 time.sleep(10) text = browser.find_element_by_xpath('//*[@id="stat_totalPlayers"]').text print(text)
更稳定的显式等待版本
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 import time url = 'https://hytrack.me/' browser = webdriver.Chrome(r'C:\Users\kinet\OneDrive\Documents\webscraper\chromedriver.exe') browser.get(url) # 最长等待15秒,每隔0.5秒检查一次元素是否加载完成 wait = WebDriverWait(browser, 15) target_element = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="stat_totalPlayers"]'))) # 等待数值渲染完成 while target_element.text.strip() == '0': time.sleep(0.5) print(target_element.text) browser.quit()
内容的提问来源于stack exchange,提问作者kineticcat_
相关产品推荐
相关产品推荐

