【问题标题】:Why text, innerText, innerHTML return empty in selenium为什么 text、innerText、innerHTML 在 selenium 中返回空
【发布时间】:2021-08-12 19:19:59
【问题描述】:
<div class="SdTitle-sc-iwgcvh dmugDV title">#24 Information Revolution</div>

我想获取这个 div 中的文本。我正在使用此代码:

title = driver.find_element_by_xpath("/html/body/div/div[2]/div[4]/div/div[2]/div[1]/div/div[1]").get_attribute("innerText")

但是它返回一个空字符串,我试过text()get_attribute("innerText")get_attribute("innerHTML")。它们都不起作用。

元素可以通过 selenium 找到。 我还在chrome中找到了这个带有xpath的元素,这意味着xpath是正确的。

如果我尝试get_attribute('outerHTML'),它会返回

<div class="SdTitle-sc-iwgcvh dmugDV title"></div>

这太奇怪了。

我在 Chrome 上搜索到这些类的 div 只有 1 个。

感谢您的帮助。

【问题讨论】:

标签: python css selenium selenium-webdriver xpath


【解决方案1】:

您使用的是text() 而不是.text

没有这样的东西叫get_attribute("innerText")

更新 1:

el = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[class^='SdTitle']"))).text
print(el)

【讨论】:

  • 我怀疑 # 使 selenium 忽略了文本。
  • 我在 chrome 中找不到这个 /html/body/div/div[2]/div[4]/div/div[2]/div[1]/div/div[1]
  • 登录后能看到那个元素吗?
  • Chrome 开发者工具/元素(命令 F,输入完整的 xpath)/
  • @cruisepandey 提出的工作解决方案el = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[class^='SdTitle']"))).text print(el)
【解决方案2】:

该属性称为innerHTML 阅读此处了解更多详情:https://www.w3schools.com/jsref/prop_html_innerhtml.asp

el = driver.find_element_by_css_selector(".SdTitle-sc-iwgcvh.dmugDV.title").text
el = driver.find_element_by_css_selector(".SdTitle-sc-iwgcvh.dmugDV.title").get_attribute("innerHTML")

打印以检查输出。 一点解释:. 用于类名。如果一个 html 标签中的类很少,您可以将它们的定位器用点分隔,不带空格。

【讨论】:

  • 谢谢,我试试
【解决方案3】:

试试这个

driver.find_element_by_xpath(".//div[@class='SdTitle-sc-iwgcvh dmugDV title']").get_attribute("innertext")

如果不使用文本从这样的元素中获取文本值

driver.find_element_by_xpath(".//div[@class='SdTitle-sc-iwgcvh dmugDV title']").text

【讨论】:

【解决方案4】:

类似的问题,我在 Protractor 中发现。我也使用不同的方法来获取文本,使用 .getText()innerTextinnerHtml 等。但最后我尝试使用 tagName 定位器来检索文本。可能下面的代码有助于您在 Selenium 中实现。注意:以下代码用于量角器

element(by.tagName('mat-chip')).getText().then(function (rowAtt) {
                console.log("Attributed Under Row Group-"+rowAtt)
                expect(rowAtt).toBe(attValues.explore.attributeValues.rowAttributes[i], 'Attribute value is not matching');
                if (rowAtt) {
                    exploreModule.attributeCheckBox().click();
                } else {
                    console.log("attribute checkbox is not present");
                }
            })

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 2014-03-26
    • 2015-04-06
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2017-01-17
    相关资源
    最近更新 更多