【问题标题】:Selenium Python how to get text(html source) from <div>Selenium Python 如何从 <div> 获取文本(html 源代码)
【发布时间】:2015-06-30 17:14:33
【问题描述】:

我正在尝试在标签&lt;div&gt; 中获取文本$27.5,我通过id 定位了元素,并且该元素称为“价格”。

html的sn-p如下:

<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()

【问题讨论】:

  • price.text 应该是要走的路。 price 的选择器可能是错误的。你能提供找到价格对象的代码吗?并且,指定错误
  • 感谢您的及时回复。是的,我认为 price.text 应该可以。这是我获取元素 price = fltright.find_element(By.CSS_SELECTOR, "*[id$='_price']") 的代码。没有错误,这就是为什么我更加困惑。我尝试打印 price.text,但没有任何反应。
  • 您在 html sn-p 中的 id 是“_priceMobile”,在您的代码中是“_price”。对吗?

标签: python html selenium tags


【解决方案1】:

你不能用正则表达式或者Beautiful Soup在HTML中查找元素的内容吗:

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

【讨论】:

  • 抱歉,我不太明白。请你稍微解释一下好吗?谢谢。
  • 首先,它是否有效?这基本上是一个在 HTML 中搜索标签之间内容的代码。
  • 对不起,这对我不起作用。我试过这段代码,编译时出错:raise error, v # invalid expression
  • 你导入了re 并且你有price 元素吗?
  • 是的,我做到了。而且我已经正确定位了我想要的元素。
【解决方案2】:

你的元素被隐藏了,上次我使用Selenium 你无法获得隐藏元素的文本。也就是说,你总是可以执行javascript,我通常不会用python编写,但它应该是这样的:

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

【讨论】:

  • 我认为在这种情况下使用getElementById 不是一个好主意
  • 我只是建议,实现所要求的方法是执行 javascript。
  • 我很抱歉。我复制了错误的 html sn-p。我已经更新了我的问题。请你看一下好吗?谢谢!
  • driver.get_element_by_xpath("//div[@class='price inlineBlock strong mediumText']").text ?
  • @Erki M. 我想你的意思是,find_element_by_xpath。不幸的是,我得到了同样的结果。什么也没有发生,当我尝试打印时,没有错误,没有打印。
【解决方案3】:

将css选择器改为

div[id$='_price']

完整代码

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

【讨论】:

  • 我很抱歉。我复制了错误的 html sn-p。我已经更新了我的问题。请你看一下好吗?谢谢!
  • 编辑应该仍然有效。您是否尝试过更改选择器?而且,这是隐藏的吗?
  • 感谢您的回复。其实不一样,它现在没有标签了。我想我正确地找到了我需要的元素,因为当我尝试打印“价格”的 id 时,我得到了我想要的东西。但我无法得到文字:(
【解决方案4】:

我尝试了您编辑的解决方案,但他们只得到 1 个 divclass。因此,我在下面尝试了这些以打印具有相同 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)

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • 这个问题是在 3 年前提出并接受的。
    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多