клик в webbrowser

  • Автор темы Автор темы Lexicon
  • Дата начала Дата начала

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("Хозяин! Я сделал!");
            }
        }
    }
}
 
Экспериментальным путем было выявлено следующее - клик отрабатывается нормально, но
косяк где то в этом кусочке кода

Код:
Развернуть Свернуть Копировать
  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 впихивать?))))
в чем подвох хз(((
 
В общем проблема решена) а вам пусть будет интересно)))
 
В общем проблема решена) а вам пусть будет интересно)))
Тоже ковыряю веббраузер в 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;
Работает в тестере как надо
2016-03-13_194824.jpg

Но если запустить макрос, то есть проект сначала, PM тупо вылетает :(
Не сталкивались с таким?
 
Тестер уже вроде давно убрали этот. Старый билд?
 
Протестируйте на последней демке. Если падать не будет - значит да)
 
Понял, попробую, спасибо!
 
Протестируйте на последней демке. Если падать не будет - значит да)
Попробовал в последней демке, так же вылетает ( Что может быть???
P.S. Очень нужно выводить html на форму
 
У меня тоже вылетает.
Поставлю таску программистам посмотреть почему
Не знаю(
 
  • Спасибо
Реакции: goblin2oo8
Хы, я баг нашел :) Главное в тестере старом работает, значит код валидный. Ну ясно, хорошо бы починили)
 
Пришлите логи приз от этой проблемы
 
У меня тоже вылетает.
Поставлю таску программистам посмотреть почему
Не знаю(
Пришлите логи приз от этой проблемы
Вроде же уже таску программистам поставили? Воспроизвести там не долго, код выше есть.
Скинуть всё из папки c:\Program Files (x86)\ZennoLab\ZennoPoster Standard\Progs\Logs\
???
 
Если спрашиваю, значит сейчас нужно оказалось) Я же не по своему желанию возвращаюсь в топики через несколько недель от нчеего делать)

Нужно запустить Diagnostic.exe в папке программы после воспроизведения проблемы и прислать полученный репорт на support@zennolab.com с ссылкой на топик
 
Спасибо, получил
 
Присоединяюсь к вопросу выше, хотя уже и не актуально для меня, но интересно)

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

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

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