python-3.x Selenium返回空字符串而不是实际数据

mitkmikd  于 2022-11-19  发布在  Python
关注(0)|答案(5)|浏览(170)

我正在通过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。
我做错了什么?

unftdfkk

unftdfkk1#

尝试使用以下代码:

numb.get_attribute("innerText")
kgsdhlau

kgsdhlau2#

从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)
vm0i2vca

vm0i2vca3#

text & innerText只适用于可见元素
如果要获取隐藏元素的文本
那么textContent可以是一个选项,

get_attribute("textContent")

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

cqoc49vn

cqoc49vn4#

我认为您没有在代码中选择正确的WebElement。
我用类似的日期选择器尝试了下面的代码,它打印了预期的日期。

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

2ekbmq325#

  • (代表问题作者张贴答案。)*

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

相关问题