0

現在、これを実行すると、2秒ごとに同じボタンをクリックし続けます。最初に見つけたIDを続けて壊すのではなく、次のIDに進む方法を見つけようとしています。これが私のコードです:

private void button2_Click(object sender, EventArgs e)
{
    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    HtmlDocument doc = webBrowser1.Document;
    HtmlElementCollection links = doc.GetElementsByTagName("a");

    foreach (HtmlElement link in links)
    {
        if (link.GetAttribute("id").Contains("user"))
        {
            link.InvokeMember("click");
            break;
        }
    }
}
4

2 に答える 2

0

1 つのオプションは、リストを追加することです。
ボタンをクリックする前に、その名前がリストにあるかどうかを確認してください。その場合は、クリックしないでください。ボタンをクリックするたびに、その名前がリストに追加されます。

于 2012-06-14T01:49:46.787 に答える
0

コードをこれに変更します...

//HtmlElementCollection links = null;
List<HtmlElement> links = null;

private void button2_Click(object sender, EventArgs e)
{
    // This way you only get the links once.
    //links = webBrowser1.Document.GetElementsByTagName("a");
    links = new List<HtmlElement>(
        webBrowser1.Document.GetElementsByTagName("a")
        .OfType<HtmlElement>());

    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    HtmlElement linkToClick = null;

    foreach (HtmlElement link in links)
    {
        if (link.GetAttribute("id").Contains("user"))
        {
            linkToClick = link;
            break;
        }
    }

    // did I find a link?
    if (linkToClick != null)
    {
        // Remove it from the list so you don't click it again.
        links.Remove(linkToClick);

        link.InvokeMember("click");
    }
    else
    {
        // Stop the timer since there are no more items.
        timer1.Stop();
    }
}

ちなみに、HtmlElementCollection に「Remove」メソッドがあるかどうかはわかりません...ない場合は、単純に汎用の List<> や ArrayList などを使用してください。

于 2012-06-14T01:53:20.950 に答える