我正在通过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。
我在这里做错了什么?
答案 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")
答案 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)