Selenium Python如何从<div>中获取文本(HTML源代码)

8

我正在尝试获取标签为<div>的文本$27.5,我已经通过id定位到了该元素,该元素的名称为“price”。

以下是html片段:

<div id="PPP,BOSSST,NYCPAS,2015-04-26T01:00:00-04:00,2015-04-26T05:20:00-04:00,_price" class="price inlineBlock strong mediumText">$27.50</div>

以下是我尝试过的内容:

price.text
price.get_attribute('value')

以上两种方法都不起作用。

更新: 感谢大家的帮助。 我将你们的回答结合起来,得到了解决方案 :)

    price = driver.find_element_by_xpath("//div[@class='price inlineBlock strong mediumText']")
    price_content = price.get_attribute('innerHTML')
    print price_content.strip()

1
price.text 应该是正确的方式。可能 price 的选择器是错误的。您能提供找到价格对象的代码吗?并且,请指明错误。 - Saifur
谢谢你的及时回复。是的,我认为 price.text 应该可以工作。以下是我的代码以获取元素:price = fltright.find_element(By.CSS_SELECTOR, "*[id$='_price']")。没有错误,这就是我更加困惑的原因。我尝试打印 price.text,但什么也没发生。 - Kennard
1
你在 HTML 代码片段中的 ID 是 "_priceMobile",而在你的代码中是 "_price"。这样正确吗? - Samuel Hawksby-Robinson
为什么无法与隐藏元素进行交互? - Erki M.
5个回答

2

您可以使用正则表达式或Beautiful Soup在HTML中查找元素的内容:

re.search(r'<div.*?>(*.?)</div>', price.get_attribute('innerHTML')).group(1)

抱歉,我不太明白。你能稍微解释一下吗?谢谢。 - Kennard
首先,它是否有效?这基本上是一段代码,用于搜索HTML标记之间的内容。 - Malik Brahimi
抱歉,这对我不起作用。我尝试了这段代码,编译时出现错误:raise error, v # 无效表达式。 - Kennard
你是否导入了 re 模块并且有一个名为 price 的元素? - Malik Brahimi
是的,我做到了。而且我已经正确地定位了我想要的元素。 - Kennard
部分地,我已经在我的帖子中更新了解决方案~ 我将其标记为解决方案,因为它对于找到我的解决方案最有帮助。感谢您的帮助。 - Kennard

0

将 CSS 选择器更改为

div[id$='_price']

完整代码
 price = fltright.find_element(By.CSS_SELECTOR, "div[id$='_price']")
 price.text

非常抱歉,我复制了错误的HTML片段。我已经更新了我的问题。你能看一下吗?谢谢! - Kennard
编辑仍应该可以使用。你尝试过更改选择器吗?而且,它是隐藏的吗? - Saifur
谢谢您的回复。实际上,它不同了,现在没有<strong>标签。我认为我已经正确地定位了我需要的元素,因为当我尝试打印“价格”的ID时,我得到了我想要的结果。但是我无法获取文本:( - Kennard

0

你的元素已被隐藏,上次我使用 Selenium 时无法获取隐藏元素的文本。尽管如此,你仍然可以执行 JavaScript,虽然我通常不是用 Python 写代码,但应该是这样:

def val = driver.execute_script("return document.getElementById('locator').innerHTML")

我认为在这种情况下使用 getElementById 不是一个很好的选择。 - Saifur
我只是在建议,实现所要求的方式是执行JavaScript。 - Erki M.
非常抱歉,我复制了错误的HTML片段。我已经更新了我的问题。你能看一下吗?谢谢! - Kennard
driver.get_element_by_xpath("//div[@class='price inlineBlock strong mediumText']").text请将上述代码翻译成中文。 - Erki M.
@Erki M. 是的。我认为我正确地定位了我需要的元素,因为当我尝试打印“price”的id时,我得到了我想要的结果。但是我无法获取文本内容:( - Kennard
显示剩余2条评论

0

我尝试了您编辑过的解决方案,但只有一个带有classdiv。因此,我尝试了以下方法来打印具有相同classdiv列表。

element更改为elements将输出一个列表:

price = driver.find_elements_by_xpath('//div[@class = "price inlineBlock strong mediumText"]')

使用for ... in range()来打印一个列表:
num = len (price)
for i in range (num):
  print (price[i].text)

-2

browser.find_element_by_xpath("//form[@id='workQueueTaskListForm']/div[1]/p").text


这个问题是3年前提出的并得到了回答的。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接