Html 从网页中的输入标记提取元素信息

Html 从网页中的输入标记提取元素信息,html,vba,input,Html,Vba,Input,我使用.getElementByID(“TBPRODDESC###############”)成功地将Excel宏写入网站。value其中####是输入框的唯一ID,但是当禁用/股票值为零或低于输入的数字时,会出现某些情况。当宏继续运行而没有错误时,识别何时发生这种情况将非常有用 在输入框中有标签“InStock”,但是由于在许多不同的输入ID中有多个此标签的实例,我不确定如何提取特定输入ID的此信息 下面是我正在使用的两个的示例 (一) “ 正在查找是否已禁用TBPRODDESC111111

我使用
.getElementByID(“TBPRODDESC###############”)成功地将Excel宏写入网站。value
其中####是输入框的唯一ID,但是当
禁用/股票值为零或低于输入的数字时,会出现某些情况。当宏继续运行而没有错误时,识别何时发生这种情况将非常有用

在输入框中有标签“InStock”,但是由于在许多不同的输入ID中有多个此标签的实例,我不确定如何提取特定输入ID的此信息

下面是我正在使用的两个
的示例

(一)

  • 正在查找是否已禁用TBPRODDESC111111或TBPRODDESC111111/“InStock”=0
(二)

  • 正在查找TBPRODDESC33333/“InStock”=5
页面上大约有100个输入元素,每个元素都有一个唯一的输入ID

我可以使用 IE.Document.getElementById(“TBPRODDESC11111”).Value=单元格(3,“C”).Value

但是使用 Stkflag=IE.Document.getElementByTagID(“InStock”)。值始终为0,因为我不确定如何指定我需要的ID InStock标记


如果您能帮助我了解如何完成此检查,我们将不胜感激。

如果我理解正确,您可以使用querySelector

let elInputs = document.querySelector('[id^="TBPRODDESC"]');
然后,您可以在该元素数组上执行业务逻辑。 例如,您可以过滤所有禁用的元素,如下所示:

let elDisabled = [];
for(let i=0; i<elInputs.length; i++) { 
  if(elInputs[0].disabled == true)
    elDisabled.push(elInputs[0]);
}
让elDisabled=[];

对于(设i=0;i如果我理解正确,您可以使用querySelector

let elInputs = document.querySelector('[id^="TBPRODDESC"]');
然后,您可以在该元素数组上执行业务逻辑。 例如,您可以过滤所有禁用的元素,如下所示:

let elDisabled = [];
for(let i=0; i<elInputs.length; i++) { 
  if(elInputs[0].disabled == true)
    elDisabled.push(elInputs[0]);
}
让elDisabled=[];
for(设i=0;i
及

然而,我对JavaScript和Excel的混合感到有点困惑


然而,我对JavaScript和Excel的混合感到有些困惑。

如果你不共享网页,我无法真正测试这一点,但我想你想:

  • 获取页面的所有
    元素
  • 获取具有
    InStock
    >0的所有输入的
    id
  • 用这个
    id
    (我想设置一个值?)
请尝试以下代码:

Set mInputs = IE.Document.getElementsByTagName("input") 'get all inputs
For Each mInput In mInputs 'loop through each of them
    If mInput.hasAttribute("InStock") Then 
        If mInput.getAttribute("InStock") <> "0" Then
            'this sets directly the value
            mInput.Value = "something"
            'you can get the id like this if you need it somewhere else:
             mId = mInput.getAttribute("id")
        End If
    End If
Next mInput 
Set minput=IE.Document.getElementsByTagName(“输入”)获取所有输入
对于每个mInput,在mInput'循环中通过每个mInput
如果mInput.hasAttribute(“InStock”),那么
如果mInput.getAttribute(“InStock”)“0”,则
'这将直接设置值
mInput.Value=“某物”
'如果您在其他地方需要它,您可以像这样获得id:
mId=mInput.getAttribute(“id”)
如果结束
如果结束
下一个明普特

如果您不共享此网页,我无法真正测试此功能,但我想您应该:

  • 获取页面的所有
    元素
  • 获取具有
    InStock
    >0的所有输入的
    id
  • 用这个
    id
    (我想设置一个值?)
请尝试以下代码:

Set mInputs = IE.Document.getElementsByTagName("input") 'get all inputs
For Each mInput In mInputs 'loop through each of them
    If mInput.hasAttribute("InStock") Then 
        If mInput.getAttribute("InStock") <> "0" Then
            'this sets directly the value
            mInput.Value = "something"
            'you can get the id like this if you need it somewhere else:
             mId = mInput.getAttribute("id")
        End If
    End If
Next mInput 
Set minput=IE.Document.getElementsByTagName(“输入”)获取所有输入
对于每个mInput,在mInput'循环中通过每个mInput
如果mInput.hasAttribute(“InStock”),那么
如果mInput.getAttribute(“InStock”)“0”,则
'这将直接设置值
mInput.Value=“某物”
'如果您在其他地方需要它,您可以像这样获得id:
mId=mInput.getAttribute(“id”)
如果结束
如果结束
下一个明普特

非常感谢您的快速回复,但我并不需要进行过滤,因为宏会遍历我们购买的供应商库存的所有物品,并在网站上填写要订购的物品。如果我能确定如何提取“InStock”“从输入中标记值,然后我可以使用该值来标记该项目将不会被订购,或者订购的库存将低于所需数量。也许您可以使用.getAttribute(“InStock”)输入元素上的方法非常感谢您的快速回复,但我并不需要进行过滤,因为宏会遍历我们购买的供应商库存的所有项目,并在网站上填写要订购的库存。如果我能确定如何提取“InStock”从输入中标记值,然后我可以使用该值来标记该项目将不会被订购,或者订购的库存将低于所需的库存。也许您可以使用.getAttribute(“InStock”)输入元素上的方法不是混合,VBA有一个与HTML DOM交互的库,该库提供适合JS的函数,因此具有相同的名称和类似的语法。但是用户使用VBA编码,而不是JavaScriptIt不是混合,VBA有一个与HTML DOM交互的库,该库提供适合JS的函数,因此具有相同的名称和相似的语法。但是用户使用的是VBA,而不是JavaScript