首页 > 解决方案 > 从科学杂志获取 xpath 时遇到问题,它返回一个没有元素的列表

问题描述

我目前正在处理的页面可以通过doi.org访问这是文章的代码:10.1126/science.aaa1442

无论如何,我试图提取地址标签之间写的内容,我使用了以下 xpath 表达式

//li[@class='aff']

html如下:

<li class="aff">
   <a id="aff-1" name="aff-1"></a>
   <address>
     <sup>1</sup>
     "Materials Science Division, Argonne National Laboratory, Lemont, 
      IL 60439, USA"
   </address>
</li>

我得到的是输出: ['', '', '', '', '', '']

我尝试扩展包含 //li[@class='aff']/address 的 xpath,并使用从 google chrome 开发人员工具复制的绝对路径进行了一些实验,结果是 ['']

xpath 被传递给我编写的这个函数。它一直在其他情况下工作,但不适用于这个:

def inspectElement(self,exp,atr=None): 

    def _init_(self,exp,atr):
        self.exp = exp
        self.atr = atr

    thread = browser.find_elements(By.XPATH,(" %s" % exp))

    xArray = [] 

    for t in thread:
        if atr == 0:
            xThread = t.get_attribute('id')
        elif atr == 1:                
            xThread = t.get_attribute('href')
        else:
             xThread = t.text         
        xArray.append(xThread)  

    return xArray

我想获取列表中当前为空的所有 6 个元素。

提前致谢。

标签: pythonseleniumxpath

解决方案


//li[@class='aff']/address是你应该使用的,应该给你 6 个元素。我已经在本地对此进行了测试,您可能需要单步执行您的代码以查看此处是否存在其他问题,导致您仅获得 1 个结果。

另一个问题是它<sup>妨碍了t.text返回任何东西。你需要做的是一些版本:

xThread = t.get_attribute('innerText')

在这种情况下,您可以为您的函数添加另一个选项,并具有以下内容:

elif atr == 2:                
    xThread = t.get_attribute('innerText')

推荐阅读