我需要从网站上的下拉列表中提取所有项目,并将其逐列粘贴到excel工作表中。
我猜getElementById应该可以工作。任何想法如何做到这一点? 谢谢。
下面是调试器的html代码。 该列表不断更新,因此,每次需要生成公司级报告时,我都需要将此更新列表提取到excel列中。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>
<HEAD>
<title>BBP::Reports</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
<LINK href="Styles.css" type="text/css" rel="stylesheet">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form method="post" action="./advrep_n.aspx" id="Form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value=""
/>
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUJODc1NTQzNzM4DjB/b4C3EeltFSjXjpspkhpCg==" />
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR"
value="3479CCB4" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION"
value="/wEdAMcCytJuOAwHIV9g5j76SLhgqMo8=" />
</div>
<input type="submit" name="btnsearch" value="Search"
id="btnsearch"
title="Click here to search"
onmouseover="this.style.backgroundColor='#D83D54'"
onmouseout="this.style.backgroundColor='#616161'"
style="color:White;background-color:#616161;font-
family:Arial;height:25px;width:87px;Z-INDEX: 120; LEFT: 832px; POSITION:
absolute; TOP: 78px" />
<span id="Label5" style="display:inline-
block;color:White;background-color:Transparent;font-family:Arial;font-
size:Large;font-weight:bold;height:28px;width:288px;Z-INDEX: 147; LEFT:
663px; POSITION: absolute; TOP: -1px"><p align="center"> Behavior Based
Process</span>
<select name="ddlCategory" id="ddlCategory" tabindex="1"
style="font-family:Verdana;font-size:8pt;height:55px;width:231px;Z-INDEX:
154; LEFT: 578px; POSITION: absolute; TOP: 73px">
<option value=""></option>
<option value="Project">Project</option>
<option value="Maintenance">Maintenance</option>
<option value="Operations">Operations</option>
<option value="Shutdown">Shutdown</option>
</select><span id="Label7" style="display:inline-block;background-
color:Transparent;font-family:Verdana;font-
size:8pt;height:6px;width:34px;Z-INDEX: 112; LEFT: 190px; POSITION:
absolute; TOP: 160px">Task:</span><select name="ddlCompany"
id="ddlCompany" tabindex="1" style="font-family:Verdana;font-
size:8pt;height:55px;width:230px;Z-INDEX: 115; LEFT: 578px; POSITION:
absolute; TOP: 136px">
<option value=""></option>
<option value="Acuren">Acuren</option>
<option value="Ahmadiah">Ahmadiah</option>
<option value="Al Bahar">Al Bahar</option>
<option value="Al Mussairie">Al Mussairie</option>
<option value="Al Subol">Al Subol</option>
<option value="Al-Barrak">Al-Barrak</option>
<option value="Al-Eisa">Al-Eisa</option>
<option value="Al-Julaih">Al-Julaih</option>
<option value="Al-Khadda">Al-Khadda</option>
<option value="Al-Kulaib">Al-Kulaib</option>
<option value="Al-Saqabi">Al-Saqabi</option>
<option value="Al-Zahim">Al-Zahim</option>
<option value="ALESSA">ALESSA</option>
<option value="Alghanim">Alghanim</option>
<option value="Alliance">Alliance</option>
<option value="ALMEER">ALMEER</option>
答案 0 :(得分:4)
您可以使用css id选择器获取父select
元素,然后添加后代组合器和option
类型选择器以获取父项中的子option
标签select
。 CSS选择器通过querySelector(单次匹配)或querySelectorAll
来获取所有匹配项。然后,您可以循环返回的nodeList并将value属性存储到数组中,并将该数组一次写到工作表中
Option Explicit
Public Sub test()
Dim ie As Object, options As Object, output(), i As Long, ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.Navigate2 "url"
While .busy Or .readystate <> 4: DoEvents: Wend
Set options = .document.querySelectorAll("#ddlCompany option")
ReDim output(1 To options.Length - 1)
For i = 1 To options.Length - 1 'ignore first empty value
output(i) = options.Item(i).Value
Next
End With
ws.Cells(1, 1).Resize(UBound(output), 1) = Application.Transpose(output)
End Sub
答案 1 :(得分:0)
在没有看到网站的HTML代码的情况下,很难给出明确的答案,但是是的,如果下拉列表被赋予了ID,则您希望从getElementsById调用开始。我在示例中粘贴了W3Schools建议创建下拉列表的示例,但还有其他方法。 (我添加了一个ID。)
如果得到结果,则拥有id所在的节点,则可以遍历作为其属性之一的ChildNodes对象,然后检查每个子级的属性。尝试获取所需的内容并将它们放入Excel单元格,然后根据您的设计进行配置。
使用文档检查每个孩子的属性和内部文本。
<select id="CarMakes" name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>