клик в webbrowser

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Братцы, кто нормально шарит в c#))) Вопрос не совсем про Зеннопостер, но пусть это будет придурь автора и это я такой сниппет хочу замутить)))))
В общем простенький кликер для счетчиков лайвинтернета. Реализовать такой на пост-гет запросах не сложно, но вот решил повоевать с классом Webbrowser, и что то не получается нифига... клик, поидее есть, но пост запрос не уходит и страница не обновляется. Как бы... я робко надеялся, что делая это все через класс браузера (IE) оно будет обрабатываться без моих усилий. В принципе и Geko можно прикрутить, но думаю проблему мою не решит...
В общем...
Умные дяденьки и не дяденьки!!! Научите дурака где накосячил))))
Листинг

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;

namespace счетчики_ливера
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string path = Environment.CurrentDirectory;// берем директорию, в которой лежит фаил
            if (richTextBox1.Text == "")
            {
                MessageBox.Show("Домены запили");// если доменов нет - ругаемся
            }
            else
            {
                List<string> domen_name = new List<string>(richTextBox1.Text.Split('\n').ToList()); //инициализируем список доменов
                WebBrowser wb = new WebBrowser();//новый браузер
                wb.ScriptErrorsSuppressed = false;
                               
                for (int i = 0; i < domen_name.Count; i++) //Проверяем, что домены в правильном формате, если нет - то приводим к нему
                {
                    if (!domen_name[i].StartsWith("http://") && !domen_name[i].StartsWith("https://"))
                    {
                        domen_name[i] = "http://" + domen_name[i];
                    }
                }

                    foreach (string data in domen_name)//для каждого домена из списка....
                    {

                        wb.Navigate("http://www.liveinternet.ru/add");//идем на страничку счетчика
                        while (wb.ReadyState != WebBrowserReadyState.Complete)//грузим
                            Application.DoEvents();

                        foreach (HtmlElement he in wb.Document.GetElementsByTagName("INPUT"))//перебираем теги, и устаналиваем значения
                        {
                            if (he.GetAttribute("name") == "email")
                                he.InnerText = textBox1.Text;
                            if (he.GetAttribute("name") == "password")
                                he.InnerText = textBox2.Text;
                            if (he.GetAttribute("name") == "check")
                                he.InnerText = textBox2.Text;
                            if (he.GetAttribute("name") == "nick")
                                he.InnerText = data.Replace(".", "_");
                            if (he.GetAttribute("name") == "url")
                                he.InnerText = data;
                            if (he.GetAttribute("name") == "name")
                                he.InnerText = data.Replace(".", "_");
                        }
                        foreach (HtmlElement he in wb.Document.GetElementsByTagName("INPUT"))//ищем кнопку - Дальше, или как она там
                        {
                            if (he.GetAttribute("name") == "ok")
                            {
                               // he.ScrollIntoView(true);  //Это были эксперименты с эмуляцией... все тупо подвисало
                                //he.Focus();
                                //SendKeys.Send("{ENTER}");
                               he.InvokeMember("click"); //не работаит(((((
                               
                                while (wb.ReadyState != WebBrowserReadyState.Complete)// нету никакой движухи
                                { 
                                    MessageBox.Show("1");
                                    Application.DoEvents(); 
                                }
                                break;
                            }
                        }
                        //Ну а дальше тоже не работает))))
                        foreach (HtmlElement he in wb.Document.GetElementsByTagName("INPUT"))
                        {
                            if (he.GetAttribute("name") == "confirmed")
                            {
                                he.InvokeMember("click");
                                while (wb.ReadyState != WebBrowserReadyState.Complete)
                                {   MessageBox.Show("2");
                                    Application.DoEvents();}
                                break;
                            }
                        }
                        foreach (HtmlElement he in wb.Document.GetElementsByTagName("INPUT"))
                        {
                            if (he.GetAttribute("name") == "go")
                            {
                                he.InvokeMember("click");
                                while (wb.ReadyState != WebBrowserReadyState.Complete)
                                    Application.DoEvents();
                                break;
                            }
                        }
                        foreach (HtmlElement he in wb.Document.GetElementsByTagName("INPUT"))
                        {
                            if (he.GetAttribute("name") == "ok")
                            {
                                
                                he.InvokeMember("click");
                                while (wb.ReadyState != WebBrowserReadyState.Complete)
                                    Application.DoEvents();
                                break;
                            }
                        }
                        foreach (HtmlElement he in wb.Document.GetElementsByTagName("TEXTAREA"))
                        {
                            string code = he.InnerText;
                            File.AppendAllText(path + domen_name + ".txt", code);

                        }
                    }
                MessageBox.Show("Хозяин! Я сделал!");
            }
        }
    }
}
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Экспериментальным путем было выявлено следующее - клик отрабатывается нормально, но
косяк где то в этом кусочке кода

Код:
  he.InvokeMember("click"); //не работаит(((((
                               
                                while (wb.ReadyState != WebBrowserReadyState.Complete)// нету никакой движухи
                                { 
                                    MessageBox.Show("1");
                                    Application.DoEvents(); 
                                }
                                break;
                            }
                        }
                        //Ну а дальше тоже не работает))))
                        foreach (HtmlElement he in wb.Document.GetElementsByTagName("INPUT"))
Если я вывожу нажатия кнопок на свои баттоны, то все проходит как надо, но почему-то во время выполнения кода обновления страницы не происходит.
wb.ReadyState отдает Complete моментально после нажатия кнопочки, но я то знаю что это не так!))) что ж мне ему руками null впихивать?))))
в чем подвох хз(((
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
В общем проблема решена) а вам пусть будет интересно)))
 

goblin2oo8

Client
Регистрация
27.08.2013
Сообщения
93
Благодарностей
95
Баллы
18
В общем проблема решена) а вам пусть будет интересно)))
Тоже ковыряю веббраузер в ZennoPoster, интересно. Столкнулся с тем, что такой код:
Код:
//*******************************************************************************************/
//Создаём форму
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
F.Text = "Управление";
F.Width=1200;    //- задает ширину формы в пикселях
F.Height=850;    //- задает высоту формы в пикселях

/*
/***************************************************************/
//создаем кнопку 2
System.Windows.Forms.Button button2 = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button2.Text = "Закрыть";
//положение в окне
button2.Location = new System.Drawing.Point(85,150);
//размер кнопочки
button2.Size=new System.Drawing.Size(75, 20);
//кидаем на форму
F.Controls.Add(button2);
/***************************************************************/
//описываем событие для клика по кнопке Закрыть
button2.Click+= delegate(object sender, System.EventArgs e)
{
    //project.Variables["kod_menu"].Value = Convert.ToString(0);
    F.Dispose();//Dispose – это уничножение объекта. Есть аналог Close, но Dispose //выгрузит форму из памяти
};
/***************************************************************/
//*
//создаем браузер
System.Windows.Forms.WebBrowser webBrowser1 = new System.Windows.Forms.WebBrowser();
//положение в окне
webBrowser1.Location = new System.Drawing.Point(200,150);
//размер
webBrowser1.Size=new System.Drawing.Size(400, 400);
//Содержимое
webBrowser1.DocumentText="<html><body>Please enter your name:<br/>" +
        "<input type='text' name='userName'/><br/>" +
        "<a href='http://www.microsoft.com'>continue</a>" +
        "</body></html>";
//кидаем на форму
F.Controls.Add(webBrowser1);

//
//позиция Формы на экране
F.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
F.ShowDialog();
return 0;
Работает в тестере как надо

Но если запустить макрос, то есть проект сначала, PM тупо вылетает :(
Не сталкивались с таким?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Тестер уже вроде давно убрали этот. Старый билд?
 

goblin2oo8

Client
Регистрация
27.08.2013
Сообщения
93
Благодарностей
95
Баллы
18

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Протестируйте на последней демке. Если падать не будет - значит да)
 

goblin2oo8

Client
Регистрация
27.08.2013
Сообщения
93
Благодарностей
95
Баллы
18
Понял, попробую, спасибо!
 

goblin2oo8

Client
Регистрация
27.08.2013
Сообщения
93
Благодарностей
95
Баллы
18
Протестируйте на последней демке. Если падать не будет - значит да)
Попробовал в последней демке, так же вылетает ( Что может быть???
P.S. Очень нужно выводить html на форму
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
У меня тоже вылетает.
Поставлю таску программистам посмотреть почему
Не знаю(
 
  • Спасибо
Реакции: goblin2oo8

goblin2oo8

Client
Регистрация
27.08.2013
Сообщения
93
Благодарностей
95
Баллы
18
Хы, я баг нашел :-) Главное в тестере старом работает, значит код валидный. Ну ясно, хорошо бы починили)
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Пришлите логи приз от этой проблемы
 

goblin2oo8

Client
Регистрация
27.08.2013
Сообщения
93
Благодарностей
95
Баллы
18
У меня тоже вылетает.
Поставлю таску программистам посмотреть почему
Не знаю(
Пришлите логи приз от этой проблемы
Вроде же уже таску программистам поставили? Воспроизвести там не долго, код выше есть.
Скинуть всё из папки c:\Program Files (x86)\ZennoLab\ZennoPoster Standard\Progs\Logs\
???
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Если спрашиваю, значит сейчас нужно оказалось) Я же не по своему желанию возвращаюсь в топики через несколько недель от нчеего делать)

Нужно запустить Diagnostic.exe в папке программы после воспроизведения проблемы и прислать полученный репорт на [email protected] с ссылкой на топик
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Спасибо, получил
 

Hozy

Client
Регистрация
06.03.2016
Сообщения
146
Благодарностей
12
Баллы
18

goblin2oo8

Client
Регистрация
27.08.2013
Сообщения
93
Благодарностей
95
Баллы
18
Присоединяюсь к вопросу выше, хотя уже и не актуально для меня, но интересно)

P.S. Может кто знает, возможно ли как то вывести на форму содержимое инстанса?)
 
  • Спасибо
Реакции: avtostopshik

Hozy

Client
Регистрация
06.03.2016
Сообщения
146
Благодарностей
12
Баллы
18
Присоединяюсь к вопросу выше, хотя уже и не актуально для меня, но интересно)

P.S. Может кто знает, возможно ли как то вывести на форму содержимое инстанса?)
Вот и я задался этим вопросом. Пока без результатно.
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)