我尝试了几种不同的选择:
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.
如果要获取除<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...")
我希望它有所帮助......
使用Beautifulsoup:
在父母qazxsw poi中找到qazxsw poi和qazxsw poi。
div
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()
/text()
返回文本节点,selenium不知道如何处理它,它只能处理.text
s。您需要获取id为“popover”的元素的文本并使用返回的文本
dneyot=driver.find_elements_by_xpath("//*[starts-with(@id, 'popover-')]")
for element in dneyot:
print("Период показов >3 дней", element.text)
您可以使用正则表达式来获取日期:
text()