Selenium无法打印div的innerText,获取文本为空无报错如何解决?
问题原因与解决方案
核心问题点
- 你使用的
ext-gen200是ExtJS框架自动生成的动态ID,每次页面刷新、渲染都会变化,固定写死ID选择器大概率会匹配到错误的空元素,或者还没渲染内容的占位元素。 - 隐式等待只会判断元素是否被加载到DOM树中,不会判断元素内的文本是否已经渲染完成,你点击搜索后虽然找到了对应ID的元素,但此时元素的文本还没被异步接口返回的内容填充,所以拿到的是空值。
- 你点击搜索按钮后没有等待页面跳转完成,可能匹配到的是搜索前页面里同ID的空占位元素。
- 旧版
find_element_by_*系列方法已被新版Selenium弃用,定位逻辑本身也存在兼容性问题。
修复代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Firefox() driver.maximize_window() # 隐式等待全局只需设置一次 driver.implicitly_wait(10) search_url = 'https://www.mergentarchives.com/search.php' driver.get(search_url) assert 'Mergent' in driver.title # 后续可优化为更稳定的非动态ID定位规则,当前先保留原定位 company_name_input = '//*[@id="ext-comp-1009"]' search_button = '//*[@id="ext-gen287"]' driver.find_element(By.XPATH, company_name_input).send_keys('3com corp') driver.find_element(By.XPATH, search_button).click() # 改用稳定的class属性定位,显式等待元素文本渲染完成 wait = WebDriverWait(driver, 20) paging_ele = wait.until( lambda d: d.find_element(By.CSS_SELECTOR, 'div.x-paging-info') if d.find_element(By.CSS_SELECTOR, 'div.x-paging-info').text.strip() != '' else False ) # 用innerText属性获取内容,兼容性比text属性更强 print(paging_ele.get_attribute('innerText')) driver.quit()
额外优化建议
- 尽量不要用
ext-开头的动态ID做定位,优先用class、元素属性、文本特征等稳定的定位规则,避免页面重新渲染后定位失效。 - 涉及异步渲染的页面优先使用显式等待替代隐式等待,可精准控制等待的触发条件,减少空内容、元素不存在等异常。
- 如果调整后仍拿不到内容,可检查分页元素是否嵌套在iframe内,若存在iframe需要先切换到对应iframe再定位元素。
内容的提问来源于stack exchange,提问作者BrianEbrahimi
相关产品推荐
相关产品推荐

