繁体   English   中英

如何<span>在硒中没有类别或标题</span>的<span>情况下</span>查找元素<span>?</span>

[英]How to find element by <span> without class or title in selenium?

我需要获取一些文本内部span标签,但是span标签没有任何类或标题。 它就像:

<span>kirnath@me.com</span>
<span>kirnath2@me.com</span>
<span>kirnath3@me.com</span>

我试过使用:

driver.find_elements_by_xpath('//*[contains(text(), 'kirnath@me.com')]')

但是我得到了错误:

SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//*[contains(text(), kirnath@me.com)]' is not a valid XPath expression.

我需要得到:

kirnath@me.com    
kirnath2@me.com   
kirnath3@me.com

如果要所有跨度,请抓住webElements列表,并使用列表理解将.text从每个文本提取到列表中。 如果您不希望所有跨度,请查找一个关系/位置参数,例如,该参数限制为所需的值。 或者,如果您要使用一致的子字符串,甚至可以匹配.text上的子字符串。

span_texts = [item.text for item in driver.find_elements_by_css_selector('span')]

xpath子字符串

driver.find_elements_by_xpath('//span[contains(text(), "me.com")]')

您可以使用:contains bs4 4.7.1中的伪类来处理来自driver.page_source的html。 然后,您可以指定一个用于匹配span标签的子字符串

from bs4 import BeautifulSoup as bs

soup = bs(driver.page_source, 'lxml')

data = [item.text for item in soup.select('span:contains("@me.com")')]
print(data)

像这样: !?

inp="bla <span>kirnath@me.com</span> blub"

p1=inp.find("<span>")
p2=inp.find("</span>")
if p1>=0 and p2>p1:
  print(inp[p1+len("<span>"):p2])

输出为:

kirnath@me.com

编辑:或者像这样进行更多匹配

inp="bla <span>kirnath@me.com</span><span>kirnath2@me.com</span><span>kirnath3@me.com</span> blub"

def find_all(inp):
  res=[]
  p=0
  while True:
    p1=inp.find("<span>", p)
    p2=inp.find("</span>", p)
    if p1>=0 and p2>p1:
      res+=[inp[p1+len("<span>"):p2]]
      p=p2+1
    else:
      return res

print(find_all(inp))

输出为:

['kirnath@me.com', 'kirnath2@me.com', 'kirnath3@me.com']

您正在对字符串内部和字符串外部的内部引号使用单引号。 在其中使用双引号。 或在引号前使用反斜杠。

尝试这个:

driver.find_elements_by_xpath('//*[contains(text(), "kirnath@me.com")]')

要么

driver.find_elements_by_xpath('//*[contains(text(), \'kirnath@me.com\')]')

这只会返回文本为kirnath@me.com的元素。

查找您可以使用的任何电子邮件地址

driver.find_elements_by_xpath('//*[contains(text(), "@") and contains(text(), ".")]')

这将找到包含带有@和文本的所有元素.

获取页面的所有span元素并不理想。 即使span标记没有任何ID或类,其父节点也可能具有一些唯一的标识符。

您可以为页面源提供某些级别的父节点吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM