在 Web Scrape 中选择多个选项
Selecting Multiple Options in Web Scrape
本地 IT 决定在不告诉任何人的情况下连夜重新映像 PC;对于备份数据的普通人来说,这不是问题,但不幸的是我在备份数据方面非常糟糕......长话短说,我正在尝试重新创建我几个月前写的网络抓取并且我正在卡在一个我不记得我 Google 找到答案的步骤上。
有一个 selection 框可以选择不同的选项(允许多个),我不记得我过去是如何写 selecting 某些选项的。下面是我所做工作的概述,以及 HTML.
的屏幕截图
- 获取内部 HTML 并将其粘贴到单元格中
- 运行 some lefts, rights, and finds 提取选项的技能代码(值)并将它们放入垂直列表中,每个列表都查找 return 一个 LOB
- select VBA 中的一个选项,如果技能代码匹配我为
提取数据的 LOB
我记得最多的是在 select 日期之后,虽然仍在 html 文档表单中,但我使用了类似
的内容
if range[first lookup cell here] = [LOB I was pulling data for] then
childrow1.selected = true
else
childrow1.selected = false
End if
if range[second lookup cell here] = [LOB I was pulling data for] then
childrow2.selected = true
else
childrow2.selected = false
End if
Etc, etc
默认情况下,所有 select 离子都开始 selected,但我找不到全部取消 select 的方法。我知道这不是要使用的确切代码,但这是正在发生的事情的要点。有 36 个技能代码(到目前为止),每个 LOB 有 2-8 个,具体取决于 LOB。这是 select 离子盒网站上的 HTML:
Selection Box HTML
<SELECT id=Skill class=summarySmallCallibriCenter multiple size=3 name=Skill rdInputValueDelimiter=",">
<OPTION selected value=44413 Row="1">44413</OPTION>
<OPTION selected value=44414 Row="2">44414</OPTION>
<OPTION selected value=44415 Row="3">44415</OPTION>
<OPTION selected value=44416 Row="4">44416</OPTION>
<OPTION selected value=44420 Row="5">44420</OPTION>
<OPTION selected value=44421 Row="6">44421</OPTION>
<OPTION selected value=44422 Row="7">44422</OPTION>
<OPTION selected value=44423 Row="8">44423</OPTION>
<OPTION selected value=44426 Row="9">44426</OPTION>
<OPTION selected value=44433 Row="10">44433</OPTION>
<OPTION selected value=44485 Row="11">44485</OPTION>
<OPTION selected value=44486 Row="12">44486</OPTION>
<OPTION selected value=44491 Row="13">44491</OPTION>
<OPTION selected value=44492 Row="14">44492</OPTION>
<OPTION selected value=44494 Row="15">44494</OPTION>
<OPTION selected value=44495 Row="16">44495</OPTION>
<OPTION selected value=44496 Row="17">44496</OPTION>
<OPTION selected value=44497 Row="18">44497</OPTION>
<OPTION selected value=44500 Row="19">44500</OPTION>
<OPTION selected value=44505 Row="20">44505</OPTION>
<OPTION selected value=44506 Row="21">44506</OPTION>
<OPTION selected value=44507 Row="22">44507</OPTION>
<OPTION selected value=44508 Row="23">44508</OPTION>
<OPTION selected value=44509 Row="24">44509</OPTION>
<OPTION selected value=44510 Row="25">44510</OPTION>
<OPTION selected value=44516 Row="26">44516</OPTION>
<OPTION selected value=44523 Row="27">44523</OPTION>
<OPTION selected value=44535 Row="28">44535</OPTION>
<OPTION selected value=44536 Row="29">44536</OPTION>
<OPTION selected value=44537 Row="30">44537</OPTION>
<OPTION selected value=44539 Row="31">44539</OPTION>
<OPTION selected value=44544 Row="32">44544</OPTION>
<OPTION selected value=44545 Row="33">44545</OPTION>
<OPTION selected value=44548 Row="34">44548</OPTION>
<OPTION selected value=44555 Row="35">44555</OPTION>
<OPTION selected value=44556 Row="36">44556</OPTION>
</SELECT>
我真的只是在寻找关于将什么代码放在那里的答案,但如果还有更简单的方法来完成这个过程,我会洗耳恭听。我从 select 离子盒中取出内部 html 的原因是,虽然不经常,但技能代码确实会改变,所以我想为将来的任何变化做好准备。和我丢失之前一样,有 6 个宏(每个 LOB 一个),每个宏都有上面的代码 36 次。它可能不是最有效的,但它完成了工作。
我是自学成才的,只用 VBA 写作了大约 6 个月,所以请温柔一点,哈哈。如果需要任何其他信息,请告诉我。
代码到此为止:
Sub Service_Level_Pull()
Dim ieApp As Object
Dim ieDoc As Object
Dim ieTable As Object
Dim clip As DataObject
Dim NextToDo As String
Dim ntdrng As Range
Dim NextEmptyDone As Long
Set ieApp = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
ieApp.Visible = True
ieApp.Navigate [login link here]
While ieApp.Busy
DoEvents
Wend
Set ieDoc = ieApp.Document
Do While ieApp.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
With ieDoc.forms(0)
.UserName.Value = [username here]
.UserPass.Value = [pw here]
End With
With ieDoc.forms(0)
.submit
End With
Do While ieApp.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
Do
ieApp.Navigate [webscrape target link here]
Do While ieApp.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
With ieDoc.forms(0)
.ipStartDate.Value = (Date - Day(today)) + 1
.ipEndDate.Value = today - 1
With ieDoc.forms(0).skill
我想通了!我改变了一些东西的计算方式,我最终写的代码是:
Do Until n = SkillCount
With ieDoc.forms(0)
.ipStartDate.Value = Format(Date - Day(Date) + 1, "mm/dd/yyyy")
.ipEndDate.Value = Format(Now() - 1, "mm/dd/yyyy")
End With
Set drp = ieDoc.forms(0).skill
If Application.WorksheetFunction.CountIf(Range(Cells(3, y).Address, Cells(Cells(1, y).Value + 2, y).Address), drp.Children(n).Value) > 0 Then
drp.Children(n).Selected = True
Else
drp.Children(n).Selected = False
End If
n = n + 1
Loop
我找到了一种方法来打印列中下拉列表中的选项,然后进行一些查找以使用 LOB 引用代码,然后我在其右侧列出了所有 LOB 以及公式从下拉列表中选择 first/next。我对原始 post 中的内容进行了更多调整,并在此代码段中省略了一些变量的定义,但此代码段是 post 的原因,所以我决定抓住它.如果任何偶然发现此线程的人在他们自己的代码中看到类似的东西,并希望我将整个东西放在这里以查看 y 和 n 的定义位置,那么只需发表评论,我将对其进行编辑。
希望这对处理包含下拉选择的网络抓取的其他人有所帮助
本地 IT 决定在不告诉任何人的情况下连夜重新映像 PC;对于备份数据的普通人来说,这不是问题,但不幸的是我在备份数据方面非常糟糕......长话短说,我正在尝试重新创建我几个月前写的网络抓取并且我正在卡在一个我不记得我 Google 找到答案的步骤上。
有一个 selection 框可以选择不同的选项(允许多个),我不记得我过去是如何写 selecting 某些选项的。下面是我所做工作的概述,以及 HTML.
的屏幕截图- 获取内部 HTML 并将其粘贴到单元格中
- 运行 some lefts, rights, and finds 提取选项的技能代码(值)并将它们放入垂直列表中,每个列表都查找 return 一个 LOB
- select VBA 中的一个选项,如果技能代码匹配我为 提取数据的 LOB
我记得最多的是在 select 日期之后,虽然仍在 html 文档表单中,但我使用了类似
的内容 if range[first lookup cell here] = [LOB I was pulling data for] then
childrow1.selected = true
else
childrow1.selected = false
End if
if range[second lookup cell here] = [LOB I was pulling data for] then
childrow2.selected = true
else
childrow2.selected = false
End if
Etc, etc
默认情况下,所有 select 离子都开始 selected,但我找不到全部取消 select 的方法。我知道这不是要使用的确切代码,但这是正在发生的事情的要点。有 36 个技能代码(到目前为止),每个 LOB 有 2-8 个,具体取决于 LOB。这是 select 离子盒网站上的 HTML: Selection Box HTML
<SELECT id=Skill class=summarySmallCallibriCenter multiple size=3 name=Skill rdInputValueDelimiter=",">
<OPTION selected value=44413 Row="1">44413</OPTION>
<OPTION selected value=44414 Row="2">44414</OPTION>
<OPTION selected value=44415 Row="3">44415</OPTION>
<OPTION selected value=44416 Row="4">44416</OPTION>
<OPTION selected value=44420 Row="5">44420</OPTION>
<OPTION selected value=44421 Row="6">44421</OPTION>
<OPTION selected value=44422 Row="7">44422</OPTION>
<OPTION selected value=44423 Row="8">44423</OPTION>
<OPTION selected value=44426 Row="9">44426</OPTION>
<OPTION selected value=44433 Row="10">44433</OPTION>
<OPTION selected value=44485 Row="11">44485</OPTION>
<OPTION selected value=44486 Row="12">44486</OPTION>
<OPTION selected value=44491 Row="13">44491</OPTION>
<OPTION selected value=44492 Row="14">44492</OPTION>
<OPTION selected value=44494 Row="15">44494</OPTION>
<OPTION selected value=44495 Row="16">44495</OPTION>
<OPTION selected value=44496 Row="17">44496</OPTION>
<OPTION selected value=44497 Row="18">44497</OPTION>
<OPTION selected value=44500 Row="19">44500</OPTION>
<OPTION selected value=44505 Row="20">44505</OPTION>
<OPTION selected value=44506 Row="21">44506</OPTION>
<OPTION selected value=44507 Row="22">44507</OPTION>
<OPTION selected value=44508 Row="23">44508</OPTION>
<OPTION selected value=44509 Row="24">44509</OPTION>
<OPTION selected value=44510 Row="25">44510</OPTION>
<OPTION selected value=44516 Row="26">44516</OPTION>
<OPTION selected value=44523 Row="27">44523</OPTION>
<OPTION selected value=44535 Row="28">44535</OPTION>
<OPTION selected value=44536 Row="29">44536</OPTION>
<OPTION selected value=44537 Row="30">44537</OPTION>
<OPTION selected value=44539 Row="31">44539</OPTION>
<OPTION selected value=44544 Row="32">44544</OPTION>
<OPTION selected value=44545 Row="33">44545</OPTION>
<OPTION selected value=44548 Row="34">44548</OPTION>
<OPTION selected value=44555 Row="35">44555</OPTION>
<OPTION selected value=44556 Row="36">44556</OPTION>
</SELECT>
我真的只是在寻找关于将什么代码放在那里的答案,但如果还有更简单的方法来完成这个过程,我会洗耳恭听。我从 select 离子盒中取出内部 html 的原因是,虽然不经常,但技能代码确实会改变,所以我想为将来的任何变化做好准备。和我丢失之前一样,有 6 个宏(每个 LOB 一个),每个宏都有上面的代码 36 次。它可能不是最有效的,但它完成了工作。
我是自学成才的,只用 VBA 写作了大约 6 个月,所以请温柔一点,哈哈。如果需要任何其他信息,请告诉我。
代码到此为止:
Sub Service_Level_Pull()
Dim ieApp As Object
Dim ieDoc As Object
Dim ieTable As Object
Dim clip As DataObject
Dim NextToDo As String
Dim ntdrng As Range
Dim NextEmptyDone As Long
Set ieApp = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
ieApp.Visible = True
ieApp.Navigate [login link here]
While ieApp.Busy
DoEvents
Wend
Set ieDoc = ieApp.Document
Do While ieApp.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
With ieDoc.forms(0)
.UserName.Value = [username here]
.UserPass.Value = [pw here]
End With
With ieDoc.forms(0)
.submit
End With
Do While ieApp.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
Do
ieApp.Navigate [webscrape target link here]
Do While ieApp.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
With ieDoc.forms(0)
.ipStartDate.Value = (Date - Day(today)) + 1
.ipEndDate.Value = today - 1
With ieDoc.forms(0).skill
我想通了!我改变了一些东西的计算方式,我最终写的代码是:
Do Until n = SkillCount
With ieDoc.forms(0)
.ipStartDate.Value = Format(Date - Day(Date) + 1, "mm/dd/yyyy")
.ipEndDate.Value = Format(Now() - 1, "mm/dd/yyyy")
End With
Set drp = ieDoc.forms(0).skill
If Application.WorksheetFunction.CountIf(Range(Cells(3, y).Address, Cells(Cells(1, y).Value + 2, y).Address), drp.Children(n).Value) > 0 Then
drp.Children(n).Selected = True
Else
drp.Children(n).Selected = False
End If
n = n + 1
Loop
我找到了一种方法来打印列中下拉列表中的选项,然后进行一些查找以使用 LOB 引用代码,然后我在其右侧列出了所有 LOB 以及公式从下拉列表中选择 first/next。我对原始 post 中的内容进行了更多调整,并在此代码段中省略了一些变量的定义,但此代码段是 post 的原因,所以我决定抓住它.如果任何偶然发现此线程的人在他们自己的代码中看到类似的东西,并希望我将整个东西放在这里以查看 y 和 n 的定义位置,那么只需发表评论,我将对其进行编辑。
希望这对处理包含下拉选择的网络抓取的其他人有所帮助