Selenium返回空字符串而不是实际数据

时间:2018-04-10 08:21:10

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

我正在通过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。

我在这里做错了什么?

5 个答案:

答案 0 :(得分:3)

尝试使用以下代码:

numb.get_attribute("innerText")

答案 1 :(得分:1)

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

我使用类似的日期选择器尝试了以下代码,并打印了预期的日期值。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

<块引用>

记住一件好事

<块引用>

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

<块引用>

如果要获取隐藏或不可见元素的文本
那么“textContent”就非常适合您!

get_attribute("textContent")

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

答案 4 :(得分:0)

get text from 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)