You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python浏览器文本框值获取问题:.text与innerHTML返回空

问题:Selenium获取输入框值为空的解决方法

功能说明

输入ID到指定输入框,获取目标输入框的对应值

问题代码

def pedido_valor(self):

    #carregando a planilha
    extravios = "extravios_01.xlsx"
    df = pd.read_excel(extravios)
    print(df)
    idpedido = self.driver.find_element("xpath",'//*[@id="__qiankun_subapp_wrapper_for_vue_service_quality_index__"]/div/div/div/div[1]/div/div/div[1]/div[1]/div[2]/div[2]/span[2]/div[1]/input')
    valornota = self.driver.find_element("xpath",'//*[@id="__qiankun_subapp_wrapper_for_vue_service_quality_index__"]/div/div/div/div[1]/div/div/div[1]/div[1]/div[2]/div[4]/span[2]/div[1]/input').get_attribute("innerHTML")
    #valornota = self.driver.find_element("xpath",'//*[@id="__qiankun_subapp_wrapper_for_vue_service_quality_index__"]/div/div/div/div[1]/div/div/div[1]/div[1]/div[2]/div[4]/span[2]/div[1]/input').text

    for index,row in df.iterrows():
        idpedido.send_keys(str(row['ID']))
        time.sleep(3)
        #valornota.click()
        time.sleep(2)
        clipboard.copy(str(valornota))
        resposta = clipboard.paste()
        print(resposta)

        time.sleep(3)
        idpedido.clear()

遇到的问题

  • 使用.text方法获取文本框值时,输出为空
  • 使用.get_attribute("innerHTML")方法时,输出同样为空

解决方案

1. 改用get_attribute("value")获取输入框内容

输入框的实际值通常存储在value属性中,而非innerHTML或通过.text获取。另外你当前代码提前获取了valornota的属性,但此时目标输入框还未生成对应值,必须在输入ID、页面更新后重新定位元素并取值。

修改后代码:

def pedido_valor(self):
    # 加载表格
    extravios = "extravios_01.xlsx"
    df = pd.read_excel(extravios)
    print(df)
    idpedido = self.driver.find_element("xpath",'//*[@id="__qiankun_subapp_wrapper_for_vue_service_quality_index__"]/div/div/div/div[1]/div/div/div[1]/div[1]/div[2]/div[2]/span[2]/div[1]/input')
    # 提前保存目标输入框的XPath,避免重复写长路径
    valornota_xpath = '//*[@id="__qiankun_subapp_wrapper_for_vue_service_quality_index__"]/div/div/div/div[1]/div/div/div[1]/div[1]/div[2]/div[4]/span[2]/div[1]/input'

    for index,row in df.iterrows():
        idpedido.send_keys(str(row['ID']))
        time.sleep(3)
        # 输入ID后重新定位元素,获取value属性
        valornota_element = self.driver.find_element("xpath", valornota_xpath)
        valornota = valornota_element.get_attribute("value")
        # 直接使用获取到的值,无需借助剪贴板
        print(valornota)

        time.sleep(3)
        idpedido.clear()

2. 替换固定等待为显式等待

固定time.sleep()可靠性差,页面加载慢时会导致取值失败,建议改用Selenium显式等待,等待目标输入框的value属性非空:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def pedido_valor(self):
    extravios = "extravios_01.xlsx"
    df = pd.read_excel(extravios)
    print(df)
    idpedido = self.driver.find_element("xpath",'//*[@id="__qiankun_subapp_wrapper_for_vue_service_quality_index__"]/div/div/div/div[1]/div/div/div[1]/div[1]/div[2]/div[2]/span[2]/div[1]/input')
    valornota_xpath = '//*[@id="__qiankun_subapp_wrapper_for_vue_service_quality_index__"]/div/div/div/div[1]/div/div/div[1]/div[1]/div[2]/div[4]/span[2]/div[1]/input'
    wait = WebDriverWait(self.driver, 10)

    for index,row in df.iterrows():
        idpedido.send_keys(str(row['ID']))
        # 等待目标输入框出现,且value属性不为空
        valornota_element = wait.until(EC.presence_of_element_located(("xpath", valornota_xpath)))
        valornota = wait.until(lambda driver: valornota_element.get_attribute("value") != "")
        print(valornota)

        # 等待输入框清空完成
        idpedido.clear()
        wait.until(lambda driver: idpedido.get_attribute("value") == "")

3. 检查元素定位有效性

由于页面使用了qiankun微前端框架,绝对XPath可能因页面结构变化失效,建议:

  • 改用相对XPath定位,比如通过输入框的placeholder、name等属性:
    # 假设目标输入框有placeholder="Valor da Nota"
    valornota_xpath = '//input[@placeholder="Valor da Nota"]'
    
  • 如果目标元素在iframe内,需先切换到iframe再定位:
    iframe = self.driver.find_element("xpath", "//iframe[@id='目标iframe的ID']")
    self.driver.switch_to.frame(iframe)
    # 之后再执行元素定位操作
    

内容的提问来源于stack exchange,提问作者Arthur Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:55:18