如何以编程方式单击Web浏览器中的div?

时间:2011-02-04 16:55:32

标签: c# .net

我已经尝试了几天,仍然没有成功地以编程方式点击这个div。所有其他输入字段和按钮使用InvokeMember(“click”)和RaiseEvent(“onclick”)正常工作,但我无法点击以下div:

<div class="pump request"> onclick="$(this).push('kjhzsd94vibjktj584ed01', null, event)" </div>

这个div在页面上重复多次,但我只想点击第一次出现。

这是我到目前为止所做的:

 HtmlElementCollection c1 = wbc1.document.GetElementsByTagName("div");

 foreach (HtmlElement e2 in c1)
 {
    if (e2.GetAttribute("class").Contains("pump request"))//also this condition is not returning true
       {
          e2.RaiseEvent("onclick");              
       }
 }

@bleepzter

如果“somecontrol”是div的一个类而不是div的id呢?

因为在我的情况下我有div类“泵请求”所以(如果我在上面的例子中写“泵请求”作为somecontrol)它在someDiv中返回Null

<div class="pump request"> onclick="$(this).push('kjhzsd94vibjktj584ed01', null, event)" </div>

@Cameron

是的,我确实进入了休息时间;但问题是if条件永远不会返回true,所以

    HtmlElementCollection c1 = wbc1.document.GetElementsByTagName("div");
    foreach (HtmlElement e2 in c1)
 {
    if (e2.GetAttribute("class").Contains("pump request"))//--> This condition is not returning true
       {
          e2.RaiseEvent("onclick"); 
          break;              
       }
 }

@Ilya Kogan

是的,我刚刚在e2.GetAttribute(“class”)上做了一个手表,发生了奇怪的事情,正在阅读实际的div(我想点击),类的值是空的:-o

3 个答案:

答案 0 :(得分:4)

尝试这个

if (e2.GetAttribute("className").Contains("pump request"))
{
    e2.InvokeMember("Click");              
}

答案 1 :(得分:2)

您可以使用网络浏览器控件尝试这段代码。

 // browser is the web browser control
 HtmlElementCollection col = browser.Document.GetElementsByTagName("div");
            foreach (HtmlElement helemnt in col)
            {
                if (helemnt.InnerText !=null && helemnt.InnerText=="something") 
                {

                    helemnt.InvokeMember("Click");

                       break; // break the loop

                }



            }

答案 2 :(得分:0)

很简单。下面是一个假设您的浏览器控件名为browser的示例,您要查找的div名为somecontrol(即div的ID为somecontrol):

HtmlElement someDiv = browser.Document.All["somecontrol"];
object someDivElement = someDiv.DomElement;

MethodInfo clickMethod = someDivElement.GetType().GetMethod("click");
clickMethod.Invoke(someDivElement, null);

这一切都可以通过反思来实现。