无法获取div文本问题:定位到的目标div返回空文本
解决Selenium获取不可见div文本为空的问题
我来帮你分析下问题所在,以及对应的解决方案:
首先,你遇到的核心问题是Selenium的.text属性只会返回元素的可见文本内容,当目标div在网页中不可见(比如被CSS隐藏、不在视口内且不可见等),调用.text就会得到空字符串,哪怕DOM里确实存在文本内容。
针对这个问题,你可以试试下面几种方法:
使用
textContent属性获取所有文本
DOM元素的textContent属性会返回元素包含的所有文本,不管元素是否可见,这是最直接的解决方案:element_value = wae_base_params[self.driver_key].find_element_by_xpath(old_config_xpath).get_attribute('textContent')使用
innerText属性(备选)
和textContent类似,innerText也能获取不可见文本,不过它会处理文本的格式(比如换行、空格),部分浏览器的表现可能略有不同,代码如下:element_value = wae_base_params[self.driver_key].find_element_by_xpath(old_config_xpath).get_attribute('innerText')优化你的XPath(可选)
虽然你的XPath//div[contains(text(),'hac-action')]看起来没问题,但text()只匹配元素的直接子文本,换成.可以匹配元素的所有文本内容(包括子元素的,不过这里你没有子元素),能让定位更鲁棒:old_config_xpath = "//div[contains(.,'hac-action')]"强制让元素可见后再获取文本(不推荐,除非必要)
如果必须使用.text属性,可以通过执行JavaScript强制显示元素,再获取文本,但这可能会改变页面布局,谨慎使用:element = wae_base_params[self.driver_key].find_element_by_xpath(old_config_xpath) # 执行JS显示元素 wae_base_params[self.driver_key].execute_script("arguments[0].style.display = 'block'; arguments[0].style.visibility = 'visible';", element) element_value = element.text
最推荐前两种方法,不需要修改页面状态就能直接拿到DOM中的文本内容。
内容的提问来源于stack exchange,提问作者Nitish Attri
相关产品推荐
相关产品推荐

