如何获取标签下的文本

问题描述 投票:2回答:5

我正在尝试在标签enter image description here下获取文本

我尝试了几种不同的选择:

dneyot=driver.find_elements_by_xpath("//*[starts-with(@id, 'popover-')]/text()")
dneyot=driver.find_elements_by_xpath("//*[starts-with(@id, 'popover-')]/b[1]/text()")

我的代码:

dneyot=driver.find_elements_by_xpath("//*[starts-with(@id, 'popover-')]/text()")
for spisok in dneyot:
    print("Период показов >3 дней", spisok.text)

UPD:我在浏览器中找到了我需要的项目:

//*[starts-with(@id, 'popover-')]/text()[1]

但得到错误

    selenium.common.exceptions.InvalidSelectorException:
Message: invalid selector: The result of the xpath expression "//*[starts-with(@id, 'popover-')]/text()[1]" is: [object Text]. It should be an element.
python python-3.x selenium dom selenium-webdriver
5个回答
1
投票

如果要获取除<b>节点文本之外的文本,则需要使用以下XPath:

//div[starts-with(@id, 'popover-')]

这将识别div节点,然后通过使用find_elements_by_xpath()方法,您可以从div节点检索所有文本。请尝试以下代码:

elements = driver.find_elements_by_xpath("//div[starts-with(@id, 'popover-')]") 
for element in elements:
    print(element.text)

更新:

我怀疑,上述方法可能无法正常工作,我们可能无法使用常规方法识别/获取数据 - 在这种情况下,您需要使用JavaScriptExecutor来获取如下数据:

driver = webdriver.Chrome('chromedriver.exe')
driver.get("file:///C:/NotBackedUp/SomeHTML.html")

xPath = "//div[starts-with(@id, 'popover-')]"
elements = driver.find_elements_by_xpath(xPath)
for element in elements:
    lenght = int(driver.execute_script("return arguments[0].childNodes.length;", element));
    for i in range(1, lenght + 1, 1):
        try:
            data = str(driver.execute_script("return arguments[0].childNodes["+str(i)+"].textContent;", element)).strip();
            if data != None and data != '':
                print data
        except:
            print "=> Can't print some data..."

由于您的网站是用英语以外的其他语言编写的,因此您可能无法打印/获取某些数据。

要获取特定的子节点数据,您需要执行以下操作:

from selenium import webdriver
driver = webdriver.Chrome('chromedriver.exe')
driver.get("file:///C:/NotBackedUp/SomeHTML.html")

xPath = "//div[starts-with(@id, 'popover-')]"
elements = driver.find_elements_by_xpath(xPath)
for element in elements:
    # For print b1 text
    b1Text = driver.execute_script("return arguments[0].childNodes[2].textContent", element);
    print b1Text

    # For printing b2 text
    b2Text = driver.execute_script("return arguments[0].childNodes[6].textContent", element);
    print b2Text

print("=> Done...")

我希望它有所帮助......


1
投票

使用Beautifulsoup:

在父母qazxsw poi中找到qazxsw poi和qazxsw poi。

div

1
投票

id = popover-34252127返回一个webelement - selenium实际使用的基本对象。 你的xpath以div结尾 - 这将返回xml文档中节点的文本内容 - 而不是selenium期望的对象。所以,只需更改它就不要有后缀 - 它将返回元素本身,并通过在Python中调用import requests from bs4 import BeautifulSoup page = requests.get("https://www.your_url_here.com/") soup = BeautifulSoup(page.content, 'html.parser') data = soup.find("div", {"id": "popover-34252127"}) print(data) 来获取其(元素的)文本:

find_elements_by_xpath()

1
投票

/text()返回文本节点,selenium不知道如何处理它,它只能处理.texts。您需要获取id为“popover”的元素的文本并使用返回的文本

dneyot=driver.find_elements_by_xpath("//*[starts-with(@id, 'popover-')]")
for element in dneyot:
    print("Период показов >3 дней", element.text)

1
投票

您可以使用正则表达式来获取日期:

text()
© www.soinside.com 2019 - 2024. All rights reserved.