触发 Web 浏览器控件内的 html 按钮

Trigger a html button inside a web browser control

本文关键字:html 按钮 控件 Web 浏览器 触发      更新时间:2023-09-26

在我的 Web 浏览器控件中,我正在访问一个表单:

<form role="form">
    <div class="form-group">
        <input type="text" class="form-control" id="InputEmail1" placeholder="name...">
    </div>
    <div class="form-group">
        <input type="email" class="form-control" id="InputPassword1" placeholder="email...">
    </div>
    <div class="form-group">
        <textarea class="form-control" rows="8" placeholder="message..."></textarea>
    </div>
      <button type="submit" class="btn btn-default">Submit</button>
</form>

如何从应用程序自动触发此按钮 vb.net? 如何将文本设置为文本区域? 正在访问文本框,如下所示:

    WebBrowser1.Document.GetElementById("InputEmail1").SetAttribute("value", "Sample")
    WebBrowser1.Document.GetElementById("InputPassword1").SetAttribute("value", "Sample")

我无法访问按钮和文本区域,因为它没有 ID 或名称? 他们有可能这样做吗?

您的元素需要具有 ID,如果您无法访问 html 代码,您可以像这样枚举元素,但您必须知道哪个元素是正确的:

foreach (HtmlElement element in WebBrowser1.Document.Forms[0].All)
{
    if (element.TagName.ToLower() == "textarea".ToLower())
    {
        element.InnerText = "text";
    }
}

要单击按钮,请尝试以下操作:

element.InvokeMember("click");

在很多 Web 自动化中,除非你可以让原始开发人员添加 id,否则你必须导航 DOM 才能找到你需要的东西。

下面是执行这种过滤和 Web 自动化的示例

var actionPanel = topPanel.insert_Above(40);
var ie = topPanel.add_IE_with_NavigationBar().silent(true); 
var server = "http://127.0.0.1.:8080";
Action<string,string> login = 
    (username, password) => {
                                ie.open(server + "/jpetstore/shop/signonForm.do");
                                ie.field("username",username);
                                ie.field("password",password);
                                ie.buttons()[1].click();  
                            };
Action loginPlaceAnOrderAndGoToCheckout = 
    ()=>{
            ie.open("http://127.0.0.1:8080/jpetstore");
            ie.link("Enter the Store").click();
            //login if needed
            var signOffLink = ie.links().where((link)=> link.url().contains("signonForm.do")).first();
            if(signOffLink.notNull())
            {
                signOffLink.click();
                login("j2ee", "pwd1");
            }           
            ie.links().where((link)=> link.url().contains("FISH"))[0].click();          
            ie.link("FI-FW-01 ").flash().click();           
            ie.links().where((link)=> link.url().contains("addItemToCart"))[0].flash().click();         
            ie.links().where((link)=> link.url().contains("checkout.do"))[0].flash().click();           
            ie.links().where((link)=> link.url().contains("newOrder.do"))[0].flash().click(); 
        };
Action scrollToTotal =  
    ()=>{
            var tdElement = ie.elements().elements("TD").toList().Where((element)=> element.innerHtml().notNull() && element.innerHtml().contains("Total:")).first();
            tdElement.scrollIntoView();                                                                                             
            tdElement.injectHtml_beforeEnd("<h2><p align=right>Look at the Total value from the table above (it should be 18.50)</p><h2>");             
        };
Action<string> exploit_Variation_1 = 
    (payload) => {
                    loginPlaceAnOrderAndGoToCheckout();                             
                    ie.buttons()[1].flash().click();  
                    ie.open(server + "/jpetstore/shop/newOrder.do?_finish=true&" + payload); 
                    scrollToTotal();
                 };
Action<string> exploit_Variation_1_SetTotalPrice = 
    (totalPrice) => { 
                        var payload = "&order.totalPrice={0}".format(totalPrice); 
                        exploit_Variation_1(payload);
                    };

另一种选择(我也经常使用)是实际使用 Javascript 来执行这些操作(如果 jQuery 在目标页面中可用(或注入),这会容易得多)。

    [Test] public void Issue_681__Navigating_libraries_views_folders__Clicking_the_icon_doesnt_work()
    {
        var tmWebServices  = new TM_WebServices();            
        Func<string, string> clickOnNodeUsingJQuerySelector = 
            (jQuerySelector)=>
                {           
                    ie.invokeEval("TM.Gui.selectedGuidanceTitle=undefined");
                    ie.invokeEval("$('#{0}').click()".format(jQuerySelector));
                    ie.waitForJsVariable("TM.Gui.selectedGuidanceTitle");
                    return ie.getJsObject<string>("TM.Gui.selectedGuidanceTitle");
                };
        if (tmProxy.libraries().notEmpty())
        {
            "Ensuring the the only library that is there is the TM Documentation".info();
            foreach(var library in tmProxy.libraries())
                if(library.Caption != "TM Documentation") 
                {
                    "deleting library: {0}".debug(library.Caption);
                    tmProxy.library_Delete(library.Caption);
                }             
        }   
        UserRole.Admin.assert();
        tmProxy.library_Install_Lib_Docs();
        tmProxy.cache_Reload__Data();
        tmProxy.show_ContentToAnonymousUsers(true);
        ieTeamMentor.page_Home();        
        //tmWebServices.script_Me_WaitForClose();;
        //ieTeamMentor.script_IE_WaitForComplete();
        ie.waitForJsVariable("TM.Gui.selectedGuidanceTitle");            
        var _jsTree =  tmWebServices.JsTreeWithFolders();
        var viewNodes = _jsTree.data[0].children;               // hard coding to the first library
        var view1_Id    = viewNodes[0].attr.id;
        var view5_Id    = viewNodes[4].attr.id;

        var click_View_1_Using_A    = clickOnNodeUsingJQuerySelector(view1_Id + " a"  );
        var click_View_5_Using_A    = clickOnNodeUsingJQuerySelector(view5_Id + " a"  );
        var click_View_1_Using_Icon = clickOnNodeUsingJQuerySelector(view1_Id + " ins"  );
        var click_View_5_Using_Icon = clickOnNodeUsingJQuerySelector(view5_Id + " ins"  );

        (click_View_1_Using_A != click_View_5_Using_A   ).assert_True(); 
        (click_View_5_Using_A == click_View_1_Using_Icon).assert_False(); // (Issue 681) this was true since the view was not updating
        (click_View_5_Using_A == click_View_5_Using_Icon).assert_True(); 
    }