Я уже загрузил заданные вопросы, но я не смог найти решение для своей проблемы.Null Value из GetElementById с использованием C#
Мое приложение - это поисковик видео, пользователь вводит то, что он ищет в текстовом поле, а затем выбирает один из трех веб-сайтов (Youtube, Metacafe, Screen.yahoo), чтобы найти видео.
Ive получил метод для каждого из вариантов, но когда он достигает метода GetElementByID, он возвращает нулевое значение для всех трех. Я собираюсь предположить, что у меня что-то пропустило, и почему я получил этот нулевой результат для всех трех методов.
Во-первых, здесь метод Youtube
private void YouTube(String Input)
{
try
{
webBrowser1.Navigate("https://www.youtube.com/");
HtmlDocument Doc = webBrowser1.Document;
HtmlElement Search = Doc.GetElementById("search_query");
Search.SetAttribute("value",Input);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Error");
}
}
Вот элементы для панели поиска (с YouTube) Я пытаюсь получить доступ.
<input id="masthead-search-term" autocomplete="off" autofocus="" onkeydown="if (!this.value && (event.keyCode == 40 || event.keyCode == 32 || event.keyCode == 34)) {this.onkeydown = null; this.blur();}" class="search-term masthead-search-renderer-input yt-uix-form-input-bidi" name="search_query" value="" type="text" tabindex="1" placeholder="" title="Search" dir="ltr" spellcheck="false" style="outline: none;">
Я пробовал оба идентификатора и имени этого элемента, но оба дали мне тот же результат.
Не уверен, что вам понадобятся другие два метода, так как они почти идентичны, но я собираюсь опубликовать их только как раз.
Вот Metacafe элемент
private void Metacafe(String Input)
{
try
{
webBrowser1.Navigate("http://www.metacafe.com/");
HtmlDocument Doc = webBrowser1.Document;
HtmlElement Search = Doc.GetElementById("searchText");
//webBrowser1.Document.GetElementById("searchText").SetAttribute("value", Input);
Search.SetAttribute("value", Input);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Error");
}
}
и элемент им пытаются подключиться.
<input value="Search Metacafe" type="text" accesskey="s" class="TextField " title="Search Metacafe" autocomplete="off" size="50" name="searchText" tabindex="1" id="SearchQuery">
И наконец метод Yahoo.
private void Yahoo(String Input)
{
try
{
webBrowser1.Navigate("https://screen.yahoo.com/");
HtmlDocument Doc = webBrowser1.Document;
HtmlElement Search = Doc.GetElementById("p");
Search.SetAttribute("value", Input);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Error");
}
}
И его элемент.
<input id="UHSearchBox" type="text" class="yucs_W(100%) Fz(18px)! O(n):f Fw(200)! Bxz(bb) M(0)! Py(4px)! Bdrs(0)! Bxsh(n)" style="border-color: rgb(117, 144, 245); opacity: 1;" name="p" aria-describedby="UHSearchBox" data-ylk="slk:srchinpt-hddn;itc:1;" data-yltvsearch="https://video.search.yahoo.com/search/" data-yltvsearchsugg="/" data-satype="mini" data-gosurl="https://search.yahoo.com/sugg/ss/gossip-us_ss/" data-pubid="112" data-appid="" data-maxresults="10" data-resize=" " data-rapid_p="2">
Спасибо, что нашли время, чтобы прочитать его. /D
Я думаю, что ваша задача будет проще, если вы будете использовать предоставленные API для Youtube и других сайтов. Запросить сайты и заполнить форму поиска можно, но если в любой момент страницы меняются, вам придется переписать свое приложение ...Проверьте API-интерфейс youtube здесь: https://developers.google.com/youtube/v3/, и я уверен, что на других сайтах есть что-то симпатичное. –