После обновления в windows или Google translate веб-сайт: как найти идентификатор элемента?
У меня есть программа перевода, которая открывает веб-сайт Google Translate в элементе управления webbrowser в нем, когда Ctrl+C нажимается 3 раза быстро в Windows, моя программа автоматически помещает то, что находится в буфере обмена на веб-странице Google Translate в элементе управления webbrowser, и он переводится, внезапно моя программа перестала работать правильно, Как получить исходное текстовое поле в виде элемента HTMLElement, чтобы получить/установить то, что находится в нем, и применить такие вещи, как "щелчок" и "фокус" на нем.
Я думаю, что больше нет элемента с идентификатором: "source" (который был текстовым полем текста, подлежащего переводу).
Ввод текста в исходном текстовом поле слишком медленный, не знаю почему (он получает одну букву каждые 0,7 секунды или что-то в этом роде)
Что я уже пробовал:
HtmlElement textArea = formMain.webBrowserGoogleTranslate.Document.GetElementById("source");
F-ES Sitecore
Вместо этого используйте API перевода
https://cloud.google.com/translate/
john1990_1
Но мне нужен надежный сайт Google Translate со всеми его функциями и визуальными элементами, я давно внедрил API, и он был недостаточно хорош.
F-ES Sitecore
Затем создайте свой собственный, а не крадите усилия других людей :)
john1990_1
Я просто помещаю веб-сайт в веб-браузер в своей программе, я просто хочу облегчить его для пользователя, поместив то, что находится в его буфере обмена, в текстовое поле.
Richard MacCutchan
Ctrl-V.
john1990_1
Я нашел, как получить доступ к элементу, просто я любитель и не мог учиться формально и узнал все это методом проб и ошибок, программа предназначена для меня и пары моих друзей, так что вы думаете, что я должен создать целый сайт Google Translate? Я не думаю, что такое использование области исходного текста запрещено!
Richard MacCutchan
Нет, это не запрещено, но это неофициальный способ сделать это. Так что не удивляйтесь, если Google усложнит вам задачу. А поскольку сайт translate прост в использовании, почему бы просто не придерживаться простого способа?
john1990_1
Когда Ctrl+C нажимается 3 раза быстро в любом месте Windows, он открывает winform с элементом управления webbrowser в нем и вставляет то, что находится в буфере обмена в текстовую область для еще более быстрого и легкого перевода из любого места в Windows, а затем нажатие кнопки "Esc" сводит winform к минимуму.
Richard Deeming
Имейте в виду, что WebBrowser
управление застряло в режиме IE7, если только вы не возитесь с реестром на каждом компьютере, где работает ваше приложение.
Я был бы удивлен, если бы сайт Google Translate работал в этом элементе управления. Даже если они еще не сделали этого, Google, скорее всего, скоро прекратит поддержку всех версий Internet Explorer.
Вместо этого вам следует рассмотреть возможность обновления и использовать более современный браузерный движок. Например:
CefSharp - быстрый веб-браузер для приложений WinForms и WPF[^]
Microsoft Пограничном Контроле WebView2 - Microsoft Край Развития | Майкрософт Документы[^]
john1990_1
У меня была эта проблема раньше, и я исправил ее, так как использовал код, который делает мою программу использовать последнюю версию IE доступной, сейчас она работает, когда она перестанет работать, я буду работать над этим, я любитель и не мог учиться в университете, и мои знания в программировании очень ограничены.
john1990_1
Если я использую Edge, как вы предложили, и я увидел, что это легко: "установите самородок и добавьте браузер в winform", могу ли я по-прежнему получить доступ к его документу так же, как обычный элемент управления webbrowser, как я сейчас получаю доступ к этому HTMLElement?
Richard Deeming
Не похоже, чтобы быть API, чтобы получить доступ в дом:
Программирование dom? · Выпуск #261 · MicrosoftEdge/WebView2Feedback · GitHub[^]
Однако вы можете выполнить Javascript в контексте страницы:
Метод CoreWebView2.ExecuteScriptAsync(String) (Microsoft.Web.WebView2.Core) | Microsoft Docs[^]
john1990_1
Может ли это выполнение Javascrpit сделать это на веб-сайте:
1 - отправить текстовое поле.
2 - Установите текст в текстовое поле.
3 - получить текст из текстового поля.
4 - Выберите текстовое поле (установите на нем фокус ввода).
Если да, то как?
Richard Deeming
Насколько я понимаю, это должно быть очень похоже на запуск скрипта на вашем собственном сайте:
// Read the textarea value: string text = await webView2.ExecuteScriptAsync("document.querySelector('textarea').value"); // Set the textarea value: await webView2.ExecuteScriptAsync("document.querySelector('textarea').value = " + JsonConvert.SerializeObject("The new value to set...")); // Set focus to the textarea: await webView2.ExecuteScriptAsync("document.querySelector('textarea').focus()"); // Submit the forum: await webView2.ExecuteScriptAsync("document.querySelector('form').submit()");
john1990_1
https://docs.microsoft.com/en-us/microsoft-edge/webview2/gettingstarted/winforms
Я установил самородок и не могу найти WebView2 в своих элементах управления, когда открываю представление дизайна моей WinForm.
Richard Deeming
Вы установили последнюю предварительную версию, как указано в документации?
john1990_1
Да.
Я получил это как "предупреждение" в VS:
Описание Кода Серьезности Состояние Подавления Строки Файла Проекта
Предупреждение о ссылочном компоненте 'C:\Users\[имя]\Dropbox\My C# Apps\translate\BombaTranslateSourceV38\packages\Microsoft.Web.WebView2.1.0.674-prerelease\build\..\..\lib\uap10.0\Microsoft.Web.WebView2.Core.winmd-не удалось найти. BombaTranslate
Richard Deeming
Вероятно, стоит поднять вопрос о проекте GitHub:
Проблемы · MicrosoftEdge/WebView2Feedback · GitHub[^]