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

Javascript 触发web浏览器控件内的html按钮,javascript,c#,vb.net,winforms,webbrowser-control,Javascript,C#,Vb.net,Winforms,Webbrowser Control,在我的web浏览器控件中,我正在访问一个表单: <form role="form"> <div class="form-group"> <input type="text" class="form-control" id="InputEmail1" placeholder="name..."> </div> <div class="form-group"> <input ty

在我的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>

我无法访问按钮和文本区域,因为它没有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);
                    };
var actionPanel=topPanel.在上面插入(40);
var ie=topPanel.add_ie_with_NavigationBar().silent(true);
var服务器=”http://127.0.0.1.:8080";
操作登录=
(用户名、密码)=>{
ie.open(server+“/jpetstore/shop/signonForm.do”);
ie.field(“用户名”,用户名);
ie.field(“密码”,password);
ie.按钮()[1]。单击();
};
操作登录PlaceAnoroderandGotocheckout=
()=>{
即打开(“http://127.0.0.1:8080/jpetstore");
ie.link(“进入商店”)。单击();
//如果需要,请登录
var signOffLink=ie.links()。其中((link)=>link.url().包含(“signonForm.do”)。first();
if(signOffLink.notNull())
{
signOffLink.click();
登录(“j2ee”、“pwd1”);
}           
ie.links()。其中((link)=>link.url()。包含(“鱼”))[0]。单击();
ie.link(“FI-FW-01”).flash().点击();
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();
};
动作滚动总计=
()=>{
var tdElement=ie.elements().elements(“TD”).toList()。其中((element)=>element.innerHtml().notNull()&&element.innerHtml()。包含(“总计:).first();
tdElement.scrollIntoView();
tdElement.injectHtml_beforeed(“

查看上表中的总值(应为18.50)

”; }; 操作利用率\u变化\u 1= (有效载荷)=>{ LoginPlaceAnoroderandGotocheckout(); ie.buttons()[1].flash().click(); ie.open(server+“/jpetstore/shop/newOrder.do?\u finish=true&“+payload); scrollToTotal(); }; 操作利用率\u变化\u 1\u设置总价格= (总价)=>{ var payload=“&order.totalPrice={0}”。格式(totalPrice); 利用变化量1(有效载荷); };
另一个选项(我也经常使用)是实际使用Javascript来执行这些操作(如果jQuery在目标页面中可用(或注入),这会容易得多)

[Test]公共作废问题\u 681\u导航\u库\u视图\u文件夹\u单击\u图标\u无效()
{
var tmWebServices=新的TM_WebServices();
函数clickOnNodeUsingJQuerySelector=
(jQuerySelector)=>
{           
ie.invokeEval(“TM.Gui.selectedGuidanceTitle=未定义”);
ie.invokeEval(“$”(“#{0}”).click()”.format(jQuerySelector));
ie.waitForJsVariable(“TM.Gui.selectedGuidanceTitle”);
返回ie.getJsObject(“TM.Gui.selectedGuidanceTitle”);
};
if(tmProxy.libraries().notEmpty())
{
“确保存在的唯一库是TM文档”。info();
foreach(tmProxy.libraries()中的var库)
if(library.Caption!=“TM文档”)
{
“删除库:{0}.debug(library.Caption);
tmProxy.library\u Delete(library.Caption);
}             
}   
UserRole.Admin.assert();
tmProxy.library_Install_Lib_Docs();
tmProxy.cache_Reload__Data();
tmProxy.show_contenttononymousers(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;//硬编码到第一个库
var view1_Id=viewNodes[0].attr.Id;
var view5_Id=viewNodes[4].attr.Id;
var单击“查看”按钮,使用“A=clickOnNodeUsingJQuerySelector(视图Id+“A”);
var单击“查看”按钮,使用“A=clickOnNodeUsingJQuerySelector(视图Id+“A”);
var单击“使用图标查看”按钮=clickOnNodeUsingJQuerySelector(视图Id+“ins”);
var单击“使用图标查看”按钮=clickOnNodeUsingJQuerySelector(视图Id+“ins”);
(单击“使用”按钮查看1);单击“使用”按钮查看5);
(使用图标单击查看)。断言错误();/(问题681)这是正确的,因为视图未更新
(单击使用图标查看);
}

am正在使用windows应用程序,您需要从该windows应用程序控制WebBrowser控件,对吗?这些代码示例是从Windows.NET应用程序(或相当于WinForms应用程序的单元)运行的
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);
                    };
    [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(); 
    }