Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 23.03.2016
Сообщений: 1

WebBrowser и его злейший враг JavaScript

24.03.2016, 08:27. Показов 1939. Ответов 0

Студворк — интернет-сервис помощи студентам
Суть проблемы, которой я до последнего делиться ни с кем не хотел, в следующем.
Есть очень сложная задача - создать мини приложение, тыкающее галочку и кнопку принять на веб морде сетевого девайса. Почему именно так не спрашивайте, ответ вам как наверное и мне не понравится...
Если кому интересно девайс UniPing, а кнопочка - "Отключить все уведомления" (вернее чекбокс).
Вот он:
HTML5
1
<input type="checkbox" name="nf_disable">
И кнопочка принять:
HTML5
1
<input type="submit" value="Применить изменения">

Итак, соорудил я по примерам, которыми щедро балуют поисковики приложеньице:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }
        string Check = "";
        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.Navigate("http://admin:12345@10.0.1.128/settings.html");
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                Application.DoEvents();
 
 
            foreach (HtmlElement he in webBrowser1.Document.GetElementsByTagName("INPUT"))
            {
                if (he.GetAttribute("name") == "nf_disable")
                {
                    he.InvokeMember("CLICK");
                    break;
                }
            }
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                Application.DoEvents();
            Thread.Sleep(2000);
 
            foreach (HtmlElement he in webBrowser1.Document.GetElementsByTagName("INPUT"))
            {
                if (he.GetAttribute("type") == "submit")
                {
                    he.InvokeMember("CLICK");
                    break;
                }
            }
            this.Close();
        }
Далее опытным путем проверил, что клики проходят (отдельно создавал приложение в котором это всё визуально отображалось).
Но увы, при попытке принять изменения кликом на кнопке "Submit" вылетает ошибка JavaScript-а:

"Uint8Array" не определено
Код: 0

Естественно после закрытия любой кнопкой этого окна уже ничего не происходит (пробовал давить всплывающие ошибки, результат тот же: положение галочки в чек боксе неизменно)
При этом каждый из браузеров IE, Chrome и FF спокойно выполняют этот скрипт.

От безысходности и растерянности попробовал поставить сторонний компонент Awesomium, но как выяснилось он не заточен под парсинг HTML, и как следствие отловить элемент и кликнуть на него не так то просто, да и мануалов не нашел.

Уважаемые знатоки, как поставить "Галочку в квадратик"?

Добавлено через 22 часа 23 минуты
Попробовал сегодня создать на базе Awesomium, по примерам приведенным в темах неподалёку.
Получилось примерно следующее:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Awesomium.Core;
using Awesomium.Windows.Forms;
 
namespace AweClicker
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private async void button1_Click(object sender, EventArgs e)
        {
            webControl1.Source = "http://admin:YtCjhbnm@10.0.1.135/settings.html".ToUri();
            await webControl1.WaitForLoadingComplete();
            using (dynamic document = (JSObject)webControl1.ExecuteJavascriptWithResult("document"))
            {
                var buttons = document.getElementsByTagName("INPUT");
                for (int i = 0; i < buttons.length; i++)
                {
                    if (buttons[i].name == "nf_disable")
                    {
                        buttons[i].click(); break;
                    }
                }                
                document.Submit();
            }
        }
 
    }
    static class WVExtesions
    {
        public static Task WaitForLoadingComplete(this IWebView wv)
        {
            var tcs = new TaskCompletionSource<bool>();
            FrameEventHandler handler = ((sender, e) =>
            {
                if (!(sender as IWebView).IsLoading)
                {
                    tcs.TrySetResult(true);
                }
            }
            );
            wv.LoadingFrameComplete += handler;
            tcs.Task.ContinueWith(_ =>
            {
                wv.LoadingFrameComplete -= handler;
            }, TaskContinuationOptions.ExecuteSynchronously);
            return tcs.Task;
        }
    }
}
Но как выяснилось, даже вручную открытая страница через WebControl Awesomium-а не реагирует на нажатие кнопки submit.

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

Возникает вопрос, а можно ли в принципе подключиться к IE через API?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2016, 08:27
Ответы с готовыми решениями:

Спирт ваш враг! Гоните его!
Мне больше спиртом нравится смывать. Заливаю в ванночку спирт, окунаю плату и тру зубной щеткой. Потом спирт сливаю в баночку, так что...

Дописать код игры так, что, когда приближается враг, расстрелять его
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; /** * CodinGame planet is being attacked by slimy insectoid aliens. ...

Javascript в webbrowser
Использую на форме webBrowser1. Просто хочу чтобы отображался нужный сайт public Form1() { InitializeComponent(); ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2016, 08:27
Помогаю со студенческими работами здесь

javascript и webbrowser
Доброго времени суток, возник следующий вопрос: Есть такой код страницы, мне нужно выполнить javascript, чтобы файл загрузился. ...

WebBrowser Javascript
Здравствуйте! Передо мной встала задача выполнить javascript функцию (click), которая генерирует контент странички сайта и дальше...

WebBrowser и javascript
Доброго времени суток Начал разбираться с webBrowser встретился с проблемой: при переходе на сайт &quot;www.slobkoll.ru&quot; стали...

Delphi. WebBrowser + Javascript
Доброго времени суток! Мне нужен код который будет нажимать на кнопку запрограммированной на javascript через компонент WebBrowser или хотя...

WebBrowser не воспроизводит JavaScript
Не работает скрипт, через обычный браузер открывает, через C# - тупо белая страница. Тест: http://fb79536l.bget.ru/money/index.html


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru