【问题标题】:How to extract the text 154 from nested div as per the html provided through Selenium and Python如何根据通过 Selenium 和 Python 提供的 html 从嵌套 div 中提取文本 154
【发布时间】:2018-08-10 21:41:48
【问题描述】:

我是 Python 网页抓取的新手。我正在编写一个程序,试图通过在 Python 中使用 selenium 库来捕获名为“stat answers col-3”的类的编号 154。

<div id="user-card" class="user-card">

            <div class="row col-content">

                <div class="col-right col-4">  
                    <div class="user-links">
                                <div class="user-stats">
        <div class="row">
            <div class="stat answers col-3">
                <span class="number">154</span>
                answers
            </div>

            <div class="stat questions col-3">
                <span class="number">44</span>
                questions
            </div>

        </div>
    </div>
    </div>
    </div>                    
    </div>

这是我的代码:

from selenium import webdriver
driver = webdriver.Chrome(executable_path="/Users/username/Downloads/chromedriver")
driver.get("website address")
content = driver.find_element_by_xpath('//div[@id="user-card" and @class="stat answers col-3"]').__getattribute__("number")

但是,我无法运行该程序。可以请任何人指出我犯错的地方。

【问题讨论】:

  • @Andersson 这个问题除了.text 之外还有多个问题。首先,OP 的定位器有点偏离。其次可能是由于某些因素 OP 想要使用getattribute()。将这两点结合起来,显然不是一个重复。请再看一遍。
  • @DebanjanB ,错误的定位器应该导致NoSuchElementException 这与如何提取文本问题无关。另请注意,Python 内置 __getattribute__() 与 Selenium get_attribute() 不同...
  • @Andersson 没错。 OP 提到我无法运行程序,但从未提到NoSuchElementExceptionInvalidSelectorwrong/no text?那么怎么可能是dup呢?此外,不要劝阻使用get_attribute(),因为该功能稳健经过验证有效

标签: python selenium selenium-webdriver xpath css-selectors


【解决方案1】:

根据给定的 HTML,要提取名为 "stat answers col-3" 的类的数量 154,您可以使用以下任一解决方案:

  • css_selector:

    content = driver.find_element_by_css_selector("div.user-card#user-card div.answers span.number").get_attribute("innerHTML")
    
  • xpath:

    content = driver.find_element_by_xpath("//div[@class='user-card' and @id='user-card']//div[@class='stat answers col-3']//span[@class='number']").get_attribute("innerHTML")
    

【讨论】:

  • 为什么不使用“.text”?
  • @ShivamMishra 显然两者都应该工作。使用 get_attribute() 背后的原因是建议进行最小的更改以保留 OP 当前的工作和创新。
猜你喜欢
  • 1970-01-01
  • 2018-11-20
  • 2019-01-31
  • 1970-01-01
  • 2019-01-06
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多