我可以使用C#webbrowser控件选择动态生成的选项元素吗? [英] Can I select a dynamically generated option element with a C# webbrowser control

查看:68
本文介绍了我可以使用C#webbrowser控件选择动态生成的选项元素吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用c#webbrowser控件来浏览我使用的商业网站。我登录并导航到特定列表。这份清单是未来的工作。然后我继续通过一些链接来竞标这些工作。在这个过程中我遇到了一个问题。



在其中一个表格中有2个选择元素(下拉列表)。这些列表上的选项是通过一些javascript脚本动态生成的 - 其中大多数都在源代码中可用。



在页面源代码中没有什么可以选择的。手动导航页面时动态显示选项 - 但我试图通过web浏览器中的c#导航它。



这是表单。 (我剪出了样式并更改了一些文字 - 我知道它的格式很糟糕,但它不是我的)



I am using a c# webbrowser control to navigate through a commercial website I work with. I log in and navigate to a particular list. The list is prospective jobs. Then I continue through some links to bid on those jobs. In the process I ran into a problem.

On one of the forms there are 2 select elements (drop down lists). The options on those lists are generated dynamically by means of some javascript scripts - most of which are available in the source.

In the page source code there is nothing to select. The options appear dynamically when navigating the page manually - but I am trying to navigate it by means of c# in a webbrowser.

Here's the form. (I cut out styles and changed some of the text - and I know it is badly formed, but it is not mine)

<form name="frm1" id="frm1" action="/tab/Transport/LoadAssigned2.asp"
 method="post">

    <table class="section">
        <tr>
            <td>Name</td>
            <td>
                <input type="text" name="s_name" id="s_name" size="25"
                 maxlength="50"></td>
        </tr>
        <tr>
            <td>Fax</td>
            <td>
                <input type="text" name="txtFaxNumber" id="txtFaxNumber" size="25"
                 maxlength="15" value="1234567890"></td>
        </tr>
        <tr>
            <td>Email</td>
            <td>
                <input type="text" name="txtEmail" id="txtEmail" size="25"
                 maxlength="225"></td>
        </tr>
        <tr>
            <td>Pickup will occur on or before</td>
            <td>
                <select name="stransp_pickup_date" id="stransp_pickup_date"
                 onchange="setDeliveryDate()">
                </select>
            </td>
        <tr>
        </tr>
            <td>Delivery will occur on or before</td>
            <td>
                <select name="stransp_delivery_date" id="stransp_delivery_date">
                </select>
            </td>
        </tr>
    </table>
    <input type="hidden" name="nload_id" id="nload_id" value="123456789">

</form>





正如你所看到的那样,两个选择元素没有子选项。这些是由脚本创建的,从setDeliveryDate开始:





As you can see the two select elements have no option children. Those are created by the scripts, starting with setDeliveryDate:

function setDeliveryDate(){
    var distance = 226;
    var delivery = $("#stransp_delivery_date");
    var pickupDate = $("#stransp_pickup_date option:selected").val();
    $("#stransp_delivery_date option").remove();
    delivery.append("<option value='-1'>SELECT DATE</option>");
    if(distance <=200){
        generateDeliveryDates(delivery,pickupDate,2);
    }else if(distance >=201 && distance <= 400){
        generateDeliveryDates(delivery,pickupDate,3);
    }else if(distance >=401 && distance <= 700){
        generateDeliveryDates(delivery,pickupDate,4);
    }else if(distance >=701 && distance <= 1400){
        generateDeliveryDates(delivery,pickupDate,5);
    }else if(distance >=1401 && distance <= 1800){
        generateDeliveryDates(delivery,pickupDate,6);
    }else if(distance >=1801 && distance <= 2200){
        generateDeliveryDates(delivery,pickupDate,7);
    }else if(distance >=2201 && distance <= 2500){
        generateDeliveryDates(delivery,pickupDate,8);
    }else if(distance >=2501 && distance <= 4000){
        generateDeliveryDates(delivery,pickupDate,9);
    }
}





generateDeliveryDates函数是:





And the generateDeliveryDates functions is:

function generateDeliveryDates(delivery,pickupDate,index){
    for (var i = 0; i < index; i++) {
        if (moment(pickupDate).add('days', i).format('dddd') == 'Sunday') {
            index++;
            delivery.append("<option value='" + moment(pickupDate).add('days',
             i).format('MM/DD/YYYY') + "'>" + moment
              (pickupDate).add('days', i).format('dddd')+" -
               "+ moment(pickupDate).add('days', i).format('MM/DD/YYYY')
                + "</option>");
        } else {
        delivery.append("<option value='" + moment(pickupDate).add('days',
        i).format('MM/DD/YYYY') + "'>" + moment
        (pickupDate).add('days', i).format('dddd')+" - "+
         moment(pickupDate).add('days', i).format('MM/DD/YYYY') + "</option>");
        }
    };
}





如果?我可以继续展示更多的脚本 - 但我希望这个想法清楚了。 select元素下的选项是基于第一个select元素中的onchange事件创建的。这是一个日期列表。



我想要做的是在两种情况下选择最后一个日期选项 - 但我看不出怎么办它存在之前。此外,列表中的选项数量因距离而异,如上所示。



非常感谢任何帮助或指导。



我尝试过的事情:



没什么 - 完全不知所措。



IfI can keep showing more of the scripts - but I'm hoping the idea is clear. The options under the select element are created based on an onchange event in the first select element. It is a list of dates.

What I want to do is to select the last of the date options in both cases - but I can't see how to do it before the exist. Also, the number of options in the list varies based on the distance, as you can see above.

Very appreciative of any help or guidance.

What I have tried:

Nothing - completely at a loss.

推荐答案

(#stransp_delivery_date);
var pickupDate =
("#stransp_delivery_date"); var pickupDate =


(#stransp_pickup_date option:selected)。val();
("#stransp_pickup_date option:selected").val();


(#stransp_delivery_date option) 。去掉();
delivery.append(< option value =' - 1'> SELECT DATE< / option>);
if(距离< = 200){
generateDeliveryDates(delivery,pickupDate,2);
}否则if(距离> = 201&&距离< = 400){
generateDeliveryDates(delivery,pickupDate,3);
}否则if(距离> = 401&&距离< = 700){
generateDeliveryDates(delivery,pickupDate,4);
}否则if(距离> = 701&&距离< = 1400){
generateDeliveryDates(delivery,pickupDate,5);
}否则if(距离> = 1401&&距离< = 1800){
generateDeliveryDates(delivery,pickupDate,6);
}否则if(距离> = 1801&&距离< = 2200){
generateDeliveryDates(delivery,pickupDate,7);
}否则if(距离> = 2201&&距离< = 2500){
generateDeliveryDates(delivery,pickupDate,8);
}否则if(距离> = 2501&&距离< = 4000){
generateDeliveryDates(delivery,pickupDate,9);
}
}
("#stransp_delivery_date option").remove(); delivery.append("<option value='-1'>SELECT DATE</option>"); if(distance <=200){ generateDeliveryDates(delivery,pickupDate,2); }else if(distance >=201 && distance <= 400){ generateDeliveryDates(delivery,pickupDate,3); }else if(distance >=401 && distance <= 700){ generateDeliveryDates(delivery,pickupDate,4); }else if(distance >=701 && distance <= 1400){ generateDeliveryDates(delivery,pickupDate,5); }else if(distance >=1401 && distance <= 1800){ generateDeliveryDates(delivery,pickupDate,6); }else if(distance >=1801 && distance <= 2200){ generateDeliveryDates(delivery,pickupDate,7); }else if(distance >=2201 && distance <= 2500){ generateDeliveryDates(delivery,pickupDate,8); }else if(distance >=2501 && distance <= 4000){ generateDeliveryDates(delivery,pickupDate,9); } }





generateDeliveryDates函数是:





And the generateDeliveryDates functions is:

function generateDeliveryDates(delivery,pickupDate,index){
    for (var i = 0; i < index; i++) {
        if (moment(pickupDate).add('days', i).format('dddd') == 'Sunday') {
            index++;
            delivery.append("<option value='" + moment(pickupDate).add('days',
             i).format('MM/DD/YYYY') + "'>" + moment
              (pickupDate).add('days', i).format('dddd')+" -
               "+ moment(pickupDate).add('days', i).format('MM/DD/YYYY')
                + "</option>");
        } else {
        delivery.append("<option value='" + moment(pickupDate).add('days',
        i).format('MM/DD/YYYY') + "'>" + moment
        (pickupDate).add('days', i).format('dddd')+" - "+
         moment(pickupDate).add('days', i).format('MM/DD/YYYY') + "</option>");
        }
    };
}





如果?我可以继续展示更多的脚本 - 但我希望这个想法清楚了。 select元素下的选项是基于第一个select元素中的onchange事件创建的。这是一个日期列表。



我想要做的是在两种情况下选择最后一个日期选项 - 但我看不出怎么办它存在之前。此外,列表中的选项数量因距离而异,如上所示。



非常感谢任何帮助或指导。



我尝试了什么:



没什么 - 完全不知所措。



IfI can keep showing more of the scripts - but I'm hoping the idea is clear. The options under the select element are created based on an onchange event in the first select element. It is a list of dates.

What I want to do is to select the last of the date options in both cases - but I can't see how to do it before the exist. Also, the number of options in the list varies based on the distance, as you can see above.

Very appreciative of any help or guidance.

What I have tried:

Nothing - completely at a loss.


这篇关于我可以使用C#webbrowser控件选择动态生成的选项元素吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆