【问题标题】:How to use C# webbrowser to select from dropdown selections and then invoke a form submit script如何使用 C# webbrowser 从下拉选择中进行选择,然后调用表单提交脚本
【发布时间】:2017-01-23 21:46:56
【问题描述】:

在 C# winform 项目中,我使用 webbrowser 对象登录网站,导航到特定列表,然后使用该列表。登录后,我需要从表单内的一些下拉选择选项中进行选择,然后提交表单(没有提交元素 - 提交表单是通过单击锚定 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,所以我不知道如何选择它。

最后,我想单击锚定图像或调用单元格中的 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>

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

【问题讨论】:

  • "我寻找但没有找到函数objForm.submit"——这是您的代码在提交表单时尝试调用的 JavaScript 函数。如果它不存在,您必须创建它。此外,由于您在它之后返回 false,它永远不会被成功调用。 &lt;a href="javascript: void 0;" onclick="objForm.submit(); return false;"&gt; 应该只是 &lt;a href="javascript: void 0;" onclick="objForm.submit();"&gt; :)
  • 谢谢。我没有编写网站 - 我只是粘贴了页面源代码中的内容。我正在尝试创建一个程序来登录并抓取我工作的列表。我尝试提交的表单定义了创建列表的查询。此外 - 更正 - 来源确实包含以下声明:objForm.onSubmit = _customOnSubmit;还有一个 _customOnSubmit 函数。如果有帮助,我可以粘贴该信息 - 我对调用该函数的想法是简单地执行以下操作:webBrowser1.Document.InvokeScript("objForm.submit");

标签: javascript c# html forms webbrowser-control


【解决方案1】:

您的权利,您无法使用 getElementbyID 方法访问第三个,但可以使用以下方式获取此 HTML 元素:

webBrowser1.Document.getElementsByTagName("select");

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

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

elementname.InvokeMember("click");

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

【讨论】:

  • HansKrywaa - 你的评论帮助很大。现在我进入下一步,将表中的信息绑定到 dataviewgrid - 当然,我再次为我获取信息的站点很少使用 id 甚至不同的类这一事实而苦苦挣扎。我可能很快会发布另一个问题....
  • 我不确定星星是如何工作的 - 看起来我在这里没有足够高的分数或声誉来给出一个 - 我没有看到任何星星的链接。但我确实用复选标记将您的答案标记为最佳答案。希望这能帮助你提升。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2023-03-11
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
相关资源
最近更新 更多