【问题标题】:How to extract text from Selenium Object?如何从 Selenium 对象中提取文本?
【发布时间】:2019-11-16 23:25:20
【问题描述】:

我的代码登录到我的 Fidelity 帐户,然后找到一个元素。我能够找到 Selenium 对象,但我想提取其中包含我的投资组合余额的文本。当我打印对象时,代码工作正常,但我无法从中获取文本或余额。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC


def fidelity_check():
    options = webdriver.ChromeOptions()
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option("detach", True)
    # options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Users\Notebook\Documents\chromedriver.exe')
    driver.get("https://www.fidelity.com/")
    WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#userId-input"))).send_keys(
        "MYUSERID")
    driver.find_element_by_css_selector("input#password").send_keys("MYPASSWORD")
    driver.find_element_by_css_selector("button#fs-login-button").click()

    try:
        element_present = EC.presence_of_element_located((By.XPATH, '// *[ @ id = "tabContentSummary"]'))
        WebDriverWait(driver, 10).until(element_present)
        print(element_present)
    except TimeoutError:
        print("Page Not Loaded.")

这是结果: selenium.webdriver.support.expected_conditions.presence_of_element_located 对象位于 0x035EFE10

这是检查元素的结果:

<span class="ledger--section-total js-total-balance-value">$X.XX</span>

我尝试了以下方法,但它不起作用。

element_present.text()
# And I tried:
element_present.text

都不行。

【问题讨论】:

  • 你试过element_present.innerHTML吗?
  • 能否提供完整的DOM?
  • @Arn,我刚试了一下,没用。我只是为整个代码编辑了它。也许称它为我的 XPATH 不是正确的方法,因为我不能使用 .text 或 .innerHTML 方法。
  • @Rock,我刚刚发布了完整的代码。

标签: python selenium


【解决方案1】:

请尝试以下解决方案

amount = wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id = "tabContentSummary"]//span')))
print(amount.text)

【讨论】:

  • 另一个人之前发布过类似的变体。它完美地工作。程序调用它太快了,所以它说 Loading... 而不是 balance。我需要延迟一点。非常感谢您的帮助!
【解决方案2】:

您必须从WebDriverWait 中分配一个变量中的值,然后获取文本。您所做的是打印硒对象。

element_present = EC.presence_of_element_located((By.XPATH, '// *[ @ id = "tabContentSummary"]'))
element=WebDriverWait(driver, 10).until(element_present)
print(element.text)

EDIT:

element_present = EC.visibility_of_element_located((By.XPATH, '// *[ @ id = "tabContentSummary"]'))
element=WebDriverWait(driver, 20).until(element_present)
print(element.text)

element_present = EC.element_to_be_clickable((By.XPATH, '// *[ @ id = "tabContentSummary"]'))
element=WebDriverWait(driver, 20).until(element_present)
print(element.text)

【讨论】:

  • 这行得通!它返回 Loading... 因为我的电脑速度很快,所以我只需要稍微延迟一下,直到显示余额。非常感谢您的回复。
  • @BrandonJacobson : 你能检查编辑选项吗?我相信你不需要使用我的编辑选项添加延迟。试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2023-04-03
  • 2019-02-04
  • 2021-07-13
  • 2017-03-21
相关资源
最近更新 更多