从Science杂志获取xpath时遇到问题,它返回一个没有元素的列表

2024-05-23 18:45:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我当前正在处理的页面可以通过doi.org网站这是文章的代码:10.1126/科学.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>

我得到的是输出: [“”,“”,“”,“”,“”,“”]

我尝试扩展xpath,包括//li[@class='aff']/address,并用从googlechrome开发工具复制的绝对路径做了一些实验,结果是['']

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个元素,目前在我的名单空。你知道吗

提前谢谢。你知道吗


Tags: selfidgetaddressdef情况attributeli
2条回答

//li[@class='aff']/address是您应该使用的,并且应该为您提供6个元素。我已经在本地测试过了,您可能需要逐步检查您的代码,看看是否有其他问题导致您只能得到1个结果。你知道吗

另一个问题是<sup>妨碍了t.text返回任何内容。您需要做的是:

xThread = t.get_attribute('innerText')

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

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

我对你的任何一个表达都没有意见,但是试试看

/li[@class='aff']/address/normalize-space()

相关问题 更多 >