Python中Selenium按ClassName定位元素后element.text为空求助
Selenium获取图片元素后element.text为空的原因及解决办法
问题描述
需要获取同一类名的Web元素用于截图,使用Python版Selenium实现,但发现element.text结果为空,页面中确实存在多个该类名的元素。
原代码
url = "https://www.pexels.com/search/happy/" driver = webdriver.Chrome(executable_path=ChromeDriverManager().install()) driver.get(url) elements = driver.find_elements(By.CLASS_NAME, "MediaCard_image__ljFAl") print("**** Start *******") print(elements.count) for element in elements: print("1") print(element.text) print("**** End *******")
执行输出
**** Start ******* <built-in method count of list object at 0x00000250202F2000> 1 1 1 1 1 1 1 1 **** End *******
原因分析
- 元素类型导致
text为空:MediaCard_image__ljFAl对应的是页面中的<img>图片元素,这类元素属于自闭合标签,本身没有文本内容。Selenium的element.text属性获取的是元素内部的文本节点内容,所以图片元素的text自然为空。 - 元素数量打印错误:Python列表没有
count方法(你看到的输出是方法对象的字符串表示),要获取元素数量应该使用len(elements)。
解决办法
- 验证元素是否正确获取:可以通过获取图片的其他属性来确认,比如
src(图片链接)或alt(替代文本):for element in elements: print(element.get_attribute("alt")) print(element.get_attribute("src")) - 直接执行截图操作:如果目标是对元素截图,无需依赖
text属性,直接调用element.screenshot()方法即可:for index, element in enumerate(elements): element.screenshot(f"happy_photo_{index}.png") - 修正元素数量打印:将
print(elements.count)改为print(len(elements)),这样就能正确输出获取到的元素总数。
内容的提问来源于stack exchange,提问作者hina abbasi
相关产品推荐
相关产品推荐

