【问题标题】:Selenium returns empty string instead of the actual dataSelenium 返回空字符串而不是实际数据
【发布时间】:2018-04-10 08:21:09
【问题描述】:

我正在通过 Python 使用 Selenium 来尝试网页抓取。我几乎到了我想去的地方,但我遇到了我现在意识到的问题并不是那么小。所以我正在使用的元素是这样的:

<td class=" ui-datepicker-days-cell-over  ui-datepicker-current-day ui-datepicker-today" 
data-handler="selectDay" data-event="click" data-month="3" data-year="2018">
    <a class="ui-state-default ui-state-highlight ui-state-active" href="#">10
    </a>
</td>

我的最终目标是获得 a 标签之间的 10 个。到目前为止,这是我的代码:

option = selenium.webdriver.ChromeOptions()
option.add_argument(" - incognito")
browser = webdriver.Chrome(executable_path=r"chromedriver.exe")
browser.get(myUrl)
calendar = browser.find_element_by_xpath(
    '/html/body/main/section/div[2]/div[1]/div[2]/div[3]/div/div[1]/div/div[1]/div[2]')
viewCal = browser.find_element_by_name('choice_set[begin_at]')
viewCal.click()

row = calendar.find_elements_by_tag_name('tr')

column = calendar.find_elements_by_tag_name('td')
numb = column[0].find_element_by_tag_name('a')
numb.text

numb.text 返回 '' 而不是 10。

我在这里做错了什么?

【问题讨论】:

  • 那么,进展如何?你试过我的答案了吗?

标签: python python-3.x selenium web-scraping selenium-chromedriver


【解决方案1】:

尝试使用以下代码:

numb.get_attribute("innerText")

【讨论】:

  • 感谢您的回答。你能想出一个为什么这行得通而不是属性方法的原因
【解决方案2】:

我认为您没有在代码中选择正确的 WebElements。

我用类似的日期选择器尝试了以下代码,它正在打印预期的天数。

days = driver.find_elements_by_xpath('//a[@class="ui-state-default"]')
daynumber = days[12].text
print(daynumber)

【讨论】:

  • 它返回 None :( 你知道为什么会这样吗?
  • @Chae 我改了答案你能再看看吗
【解决方案3】:

(代表问题作者发布答案。)

我很困惑为什么会这样,但我想我太深入了。我跳过了代码的最后两个步骤,而是使用column[0].text 完成了,这很有效!同样正如 Ratmir 在底部的回答 numb.get_attribute("innerText") 也给出了正确答案。

【讨论】:

    【解决方案4】:

    要记住的一件好事

    文本和“innerText”仅适用于可见文本

    如果要获取隐藏或不可见元素的文本
    那么“textContent”就是你的最佳选择!

    get_attribute("textContent")
    

    来源 - https://stackoverflow.com/a/43430097/14454151

    【讨论】:

      【解决方案5】:

      WebElement获取文本的核心逻辑:

      • webElement.text
      • webElement.get_attribute("innerText")
      • webElement.get_attribute("textContent")

      完整代码:

      def getText(curElement):
          """
          Get Selenium element text
      
          Args:
              curElement (WebElement): selenium web element
          Returns:
              str
          Raises:
          """
          # # for debug
          # elementHtml = curElement.get_attribute("innerHTML")
          # print("elementHtml=%s" % elementHtml)
      
          elementText = curElement.text # sometime NOT work
      
          if not elementText:
              elementText = curElement.get_attribute("innerText")
      
          if not elementText:
              elementText = curElement.get_attribute("textContent")
      
          # print("elementText=%s" % elementText)
          return elementText
      

      叫它:

      curTitle = getText(h2AElement)
      

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 1970-01-01
        相关资源
        最近更新 更多