john1990_1 Ответов: 2

После обновления в 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[^]

2 Ответов

Рейтинг:
4

john1990_1

Это решило все для меня (Win10):

HtmlElement textArea = formMain.webBrowserGoogleTranslate.Document.GetElementsByTagName("TEXTAREA")[0];


В то время как на моем другом компьютере Win10 проблема изначально не существовала, и это решение все еще работало на нем.


Dave Kreskowiak

И когда они не используют текстовую область на следующей итерации пользовательского интерфейса, что вы собираетесь делать?

Это проблема с веб-выскабливание. Вы понятия не имеете, что вам придется искать, когда сайт изменится.

john1990_1

Я уже давно работаю с этой программой, и Google не сильно меняет страницу перевода, каждый раз, когда это происходит, я делаю обновление своей программы. Я любитель, и эта программа для меня и некоторых друзей.

Рейтинг:
2

Dave Kreskowiak

Вот в чем проблема с тем, что вы делаете.

Каждый раз, когда веб-сайт, который вы используете, меняется, вы должны копаться в новом HTML и находить то, что вам нужно. Владельцы сайта могут свободно изменять все, включая css, идентификаторы, события, javascript, ... не говоря вам, и вы должны делать ВСЮ работу самостоятельно. Вы не можете полагаться на код, чтобы сделать это за вас.


john1990_1

Я пытался найти идентификатор элемента в Inspect in Chrome, но я не могу его найти, и да, каждые ~ 4-5 лет я буду менять идентификатор элемента, на этот раз я не могу найти идентификатор, может ли кто-нибудь помочь мне, пожалуйста, сказать мне, как получить доступ к HTMLElement? как я уже сказал, я просто помещаю веб-сайт в веб-браузер в своей программе, я просто хочу сделать его проще для пользователя, поместив то, что находится в его буфере обмена в текстовое поле, моя программа предназначена для меня и моих друзей без каких-либо платежей и пожертвований. как добраться до HTMLElement из имени класса?