如何使用 C# webbrowser 从下拉列表 select 中选择 select,然后调用表单提交脚本

How to use C# webbrowser to select from dropdown selections and then invoke a form submit script

在 C# winform 项目中,我使用 webbrowser 对象登录网站,导航到特定列表,然后使用该列表。登录后,我需要从表单内的一些下拉菜单 selection 选项中 select 然后提交表单(没有提交元素 - 提交表单是通过单击锚定的图像来完成的一个onclick事件,如下图。

这是目标站点上的代码的缩写版本(我已经将其缩短了很多 - 我想我把所有相关的东西都留在了里面。我还删除了所有样式以专注于 HTML 和 javascript)。最后一点 - 我寻找但没有找到函数 objForm.submit:

<form name="frm1" id="frm1" action="/tab/formaction.asp" method="post">
<table>
<tr><td> Locations</td></tr>
<tr><td>
<table>
    <tr>
        <td>Origin</td>
        <td>
            <select title="Choose Origin Location(s)" name="origin_location"
             id="origin_location" multiple="multiple">
                <option value="0">ANYWHERE</option>
        <option value="1">North West</option>
        <option value="2">North Central</option>
        <option value="3">Great Lakes</option>
        <option value="4">North East</option>
        <option value="5">South West</option>
    </select>
        </td>
    </tr>
    <tr>
        <td>Destination</td>
        <td>
            <select title="Choose Destination Location(s)"
              name="destination_location" id="destination_location"
               multiple="multiple">
                <option value="0">ANYWHERE</option>
        <option value="1">North West</option>
        <option value="2">North Central</option>
        <option value="3">Great Lakes</option>
        <option value="4">North East</option>
        <option value="5">South West</option>
    </select>
        </td>
    </tr>

    <tr>
        <td>Number of People</td>
        <td>
            <select name="people">
        <option value="1">1+</option>
                    <option value="2">2+</option>
                    <option value="3">3+</option>
                    <option value="4">4+</option>
            </select>
            <select style="visibility:hidden;" name="equality">
                <!--
                <option value="<=">Less than or Equal</option>
                <option value="=">Equal</option>
                !-->
                <option value=">=">Greater than or Equal</option>
            </select>
        </td>
    </tr>
    <tr>
        <td>
            <a href="javascript: void 0;" onclick="objForm.submit(); return
                 false;">
                <img src="/tab/images/buttons/submit.gif" border="0"
                    WIDTH="71" HEIGHT="21">
            </a>
        </td>
    </tr>
</table>
</td></tr></table>
<input type="hidden" name="origin_text" id="origin_text">
<input type="hidden" name="origin_region_id" id="origin_region_id">
<input type="hidden" name="origin_state_id" id="origin_state_id">
<input type="hidden" name="origin_city_id" id="origin_city_id">

<input type="hidden" name="destination_text" id="destination_text">
<input type="hidden" name="destination_region_id"
      id="destination_region_id">
<input type="hidden" name="destination_state_id" id="destination_state_id">
<input type="hidden" name="destination_city_id" id="destination_city_id">

<input type="hidden" name="equality_text" id="equality_text">
<input type="hidden" name="sZip" id="sZip">
</form>

我尝试过的:

我的第一个想法是为我要选择的三个东西中的第一个和第二个设置属性,如下所示:

 webBrowser1.Document.GetElementById("origin_location")
   .SetAttribute("value", "4");

 webBrowser1.Document.GetElementById("destination_location")
    .SetAttribute("value", "4");

我不确定我做的那两个是否正确,第三个没有 ID,所以我不知道如何 select 它。

最后,我想单击锚定图像或调用单元格中的 onclick 脚本:

<a href="javascript: void 0;" onclick="objForm.submit(); return false;">
    <img src="/tab/images/buttons/submit.gif" border="0" WIDTH="71"
     HEIGHT="21">
</a>

很明显,我是一个相当新的编码员,感谢任何帮助或指导。

你说得对,你无法使用 getElementbyID 方法访问第三个元素,但可以使用以下方法获取此 HTML 元素:

webBrowser1.Document.getElementsByTagName("select");

这应该 return 一个 HtmlElementCollection。因为只有三个 "select" 个元素,所以它必须是这个集合中的第三个。

要执行 Click,请使用相同的 getElementbyTagName 方法,但使用 "a"。如果你有正确的元素,你执行点击:

elementname.InvokeMember("click");

提示:在创建集合的位置设置一个断点并在调试模式下启动。比看看元素是否收集成功 :)