тег ввода InvokeMember («Click») не запускает событие onclick в веб-браузере - PullRequest
6 голосов
/ 20 июля 2011

Я использую Dotnet Web Browser для нажатия на элемент ввода - кнопку. Когда это событие щелчка вызывается, оно выполняет функцию JS, которая генерирует капчу с помощью Google Recaptcher, источник которой выглядит как Ссылка на рекапчу . Теперь проблема в том, что я не могу запустить событие onClick , я использую следующий код:

HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input");
        foreach (HtmlElement inputTag in inputColl)
        {
            string valueAttribute = inputTag.GetAttribute("value");
            if (valueAttribute.ToLower() == "sign up")
            {
                inputTag.Focus();
                inputTag.InvokeMember("Click");
                break;
            }
        }

Я проверил все, я ловлю правильную кнопку, но не знаю, почему событие onClick не запускается. Любое предложение приветствуется.

Ответы [ 5 ]

3 голосов
/ 03 октября 2011
  1. Добавить ссылку на Microsoft.mshtml;
  2. Посмотрите на фиксированный пример ниже:

        HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input");
        foreach (HtmlElement inputTag in inputColl)
        {
            string valueAttribute = inputTag.GetAttribute("value");
            if (valueAttribute.ToLower() == "sign up")
            {
                inputTag.Focus();
                IHTMLElement nativeElement = el.DomElement as IHTMLElement;
                nativeElement.click();
                break;
            }
        }
    
1 голос
/ 15 апреля 2012

Это должно работать наверняка.Я протестировал его на Anchors и DIv, которые содержат событие onclick.

HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input");     
foreach (HtmlElement inputTag in inputColl)     
{         
    string valueAttribute = inputTag.GetAttribute("value");         
    if (valueAttribute.ToLower() == "sign up")        
    { 
        obj = inputTag.DomElement;                            
        mi = obj.GetType().GetMethod("click");                             
        mi.Invoke(obj, new object[0]);         
    }     
} 

Мне не удалось открыть ссылку, чтобы увидеть код, поэтому я не пробовал его специально для вашего случая.В любом случае, если это не сработает, может контейнер TAG будет вставлен в форму, в этом случае вам нужно запустить событие отправки формы, а не запускать нажатие на кнопку отправки в sorm.

В любом случае,Пусть ваш код будет работать так же хорошо, если вы называете «щелчок» в нижнем регистре (я действительно не проверял, просто догадываясь, гайка в случае с C # имеет значение!).

PS: См. Веб-браузер: последовательность активируется, когдаno DocumentCompleted запускается по ссылке на размещенной веб-странице , чтобы найти интересный сторонний код для вашего случая, надеюсь, это поможет, и пусть кто-нибудь поможет мне вернуться!

0 голосов
/ 13 февраля 2018

Попробуйте

if (inputTag.InnerHtml == "sign up" || inputTag.InnerText.Contains("sign up"))
{
     inputTag.InvokeMember("click");
}

Просто поиграйте с условиями, проверьте, правильно ли вы нажали кнопку. Кстати, небольшой случай "нажмите" на InvokeMember. Это то, что я использую, и это работает для меня.

0 голосов
/ 23 марта 2015

Поскольку объект уже находится в фокусе, попробуйте отправить ключ ENTER следующим образом:

SendKeys.Send("{ENTER}")
0 голосов
/ 29 ноября 2011

Вы уверены, что «Клик» - правильное имя?У меня есть почти идентичный код, чтобы сделать то же самое, и имя атрибута «onclick».Взгляните на HTML-код страницы.

            foreach (HtmlElement element in col)
            {
                if (element.GetAttribute(attribute).Equals(attName))
                {
                    // Invoke the "Click" member of the button
                    element.InvokeMember("onclick");
                }
            }
...