Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

C# WPF Webbrowser примеры кода

Posted on 30 сентября, 20153 ноября, 2015 by admin

В C# есть два WebBrowser, один в пространстве имен System.Windows.Controls.WebBrowser, а другой в System.Windows.Forms.WebBrowser.

Похоже первый браузер который есть в WPF а это System.Windows.Controls.WebBrowser он вроде по функционалу слабенький для парсеров и ботов, поэтому мы будем использовать webbrowser  System.Windows.Forms.WebBrowser.

всяко разно »

чтобы не выводились ошибки сценария JavsScript добавим

1
webBrowser.ScriptErrorsSuppressed = true;

1. Подключение WebBrowser к WPF

Показать »

И так для начала нам нужно подключить веббраузер. По умолчанию у нас подключен System.Windows.Controls.WebBrowser. Его использовать не составляет труда, но потому что он убогий по функционалу, мы будем использовать другой из WondowsForm. Для того чтобы использовать пространство имен System.Windows.Forms нужно в менеджере ссылок его подключить. Заходим в проект и добавляем ссылки System.Windows.Forms , а также нужно еще добавить ссылку WindowsFormsIntegration. Все мы можем использовать браузер.

Чтобы браузер было виндо нужно его встроить на страницу

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Window x:Class="Test_fl.ru.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test_fl.ru"
        xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        mc:Ignorable="d"
        
        Title="MainWindow" Height="489.577" Width="860.586">
    <Grid Margin="0,0,2,-21">
        <Button x:Name="button" Content="Start" HorizontalAlignment="Left" Margin="718,24,0,0" VerticalAlignment="Top" Width="75" Click="button_Click" IsDefault="True"/>
        <TextBox x:Name="url" HorizontalAlignment="Left" Height="23" Margin="38,24,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="600"/>
        
        <WindowsFormsHost Margin="38,24,189,57">
            <forms:WebBrowser x:Name="webBrowser"></forms:WebBrowser>
        </WindowsFormsHost>
    </Grid>
</Window>

этой строчкой мы указываем ссылку на формы

1
xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

а эти строчки встраивают браузер на страницу

1
2
3
<WindowsFormsHost Margin="38,24,189,57">
      <forms:WebBrowser x:Name="webBrowser"></forms:WebBrowser>
</WindowsFormsHost>

2. Прочитать текст из WebBrowser

Показать »

Просто так нельзя присвоить, потому что если сайт будет в cp1251 или другой кодировке отличной от utf8, то при записи в файл будут крякозябры

1
string text = webBrowser.DocumentText;

Нужно делать так через потоки

1
2
3
4
5
Stream stream = webBrowser.DocumentStream;
StreamReader sr = new StreamReader(stream, Encoding.Default);
string text = sr.ReadToEnd();
stream.Close();
textBox.Text = text;

3. Удалить cookie из webbrowser

Показать »

Подключаем wininet.dll

1
2
3
4
5
6
[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
        private static extern bool InternetSetOption(
                                                    IntPtr hInternet,
                                                    int dwOption,
                                                    IntPtr lpBuffer,
                                                    int lpdwBufferLength);

не забываем добавить в самом начале файла

1
using System.Runtime.InteropServices;

И сам код

1
2
3
4
5
6
7
8
//logOut
        private void button_logout_Click(object sender, RoutedEventArgs e)
        {
            if(InternetSetOption(IntPtr.Zero, 42, IntPtr.Zero, 0))
            {
                System.Diagnostics.Process.Start("cmd.exe", "/C RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255");
            }
        }

Отключить вывод ошибко в webbrowser

Показать »

1
webBrowser.ScriptErrorsSuppressed = true;

Дождаться конца загрузки страницы DocumentCompleted

Показать »

1
2
3
4
5
6
7
8
9
//событие на загрузку страницы
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (e.Url.AbsolutePath != (sender as System.Windows.Forms.WebBrowser).Url.AbsolutePath)
        return;
 
    m_flag = false;
    m_timer.Stop();
}

webbrower шаблон для winforms

Показать »

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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;
 
namespace BotForSteam
{
    public partial class Form1 : Form
    {
        public System.Windows.Forms.Timer m_timer;//таймер
        public int m_count;
        public bool m_flag;
 
        public Form1()
        {
            InitializeComponent();
            //инициализация таймера
            m_timer = new System.Windows.Forms.Timer();//таймер
            m_timer.Tick += new EventHandler(f_timer);//подписка на событие
            m_timer.Interval = 1000;//1 секунда
 
            webBrowser.ScriptErrorsSuppressed = true;
            webBrowser.Navigate("http://google.ru");
        }
 
        private void button_Start_Click(object sender, EventArgs e)
        {
            MyNavigate("http://fl.ru");
        }
 
        private void button_Logout_Click(object sender, EventArgs e)
        {
            
        }
 
        //таймер
        private void f_timer(object sender, EventArgs e)
        {
            m_count--;
            textBox.AppendText(Convert.ToString(m_count, 10) + "\n");
            if (m_count < 0)
            {
                m_flag = false;//выход из цикла
            }
        }
 
        //функция для загрузки страницы
        private void MyNavigate(string url)
        {
            m_flag = true;
            m_count = 10;//секунд
            m_timer.Start();//запуск таймера
            webBrowser.Navigate(url);
            while (m_flag)
            {
                System.Windows.Forms.Application.DoEvents();
                //задержка 0.1 сек
                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.1));
            }
            m_timer.Stop();//остановка таймера
        }
 
        //событие на загрузку страницы
        private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (e.Url.AbsolutePath != (sender as System.Windows.Forms.WebBrowser).Url.AbsolutePath)
                return;
 
            m_flag = false;
            m_timer.Stop();
        }
    }
}

еще один

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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 System.Runtime.InteropServices;//для подключения длл
 
namespace BotForSteam
{
    public partial class Form1 : Form
    {
        public System.Windows.Forms.Timer m_timer;//таймер
        public int m_count;
        public bool m_flag;
 
        [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
        private static extern bool InternetSetOption(
                                                    IntPtr hInternet,
                                                    int dwOption,
                                                    IntPtr lpBuffer,
                                                    int lpdwBufferLength);
 
        public Form1()
        {
            InitializeComponent();
            //инициализация таймера
            m_timer = new System.Windows.Forms.Timer();//таймер
            m_timer.Tick += new EventHandler(f_timer);//подписка на событие
            m_timer.Interval = 1000;//1 секунда
 
            webBrowser.ScriptErrorsSuppressed = true;
            webBrowser.Navigate("http://google.ru");
        }
 
        private void button_Start_Click(object sender, EventArgs e)
        {
            MyNavigate("http://fl.ru");
        }
 
        private void button_Logout_Click(object sender, EventArgs e)
        {
            if (InternetSetOption(IntPtr.Zero, 42, IntPtr.Zero, 0))
            {
                System.Diagnostics.Process.Start("cmd.exe", "/C RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255");
            }
        }
 
        //таймер
        private void f_timer(object sender, EventArgs e)
        {
            m_count--;
            textBox.AppendText(Convert.ToString(m_count, 10) + "\n");
            if (m_count < 0)
            {
                m_flag = false;//выход из цикла
                m_timer.Stop();//останавливаем таймер
            }
        }
 
        //функция для загрузки страницы
        private void MyNavigate(string url)
        {
            m_flag = true;
            m_count = 10;//секунд
            m_timer.Start();//запуск таймера
            webBrowser.Navigate(url);
            while (m_flag)
            {
                System.Windows.Forms.Application.DoEvents();
                //задержка 0.1 сек
                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.1));
            }
            m_timer.Stop();//остановка таймера
        }
 
        //событие на загрузку страницы
        private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (e.Url.AbsolutePath != (sender as System.Windows.Forms.WebBrowser).Url.AbsolutePath)
                return;
 
            m_flag = false;//выход из цикла
            m_timer.Stop();//останавливаем таймер
        }
 
        private void button_Set_Click(object sender, EventArgs e)
        {
 
        }
    }
}

запись в файл текста из webbrowser в той кодировке в которой он есть

Показать »

1
2
3
4
5
6
7
8
// 2. проверяем была ли авторизация
Stream stream = webBrowser.DocumentStream;
StreamReader sr = new StreamReader(stream, Encoding.Default);
string text = sr.ReadToEnd();
stream.Close();
//textBox.Text = text;
//сохраняем в файл с кодировкой по умолчанию
File.WriteAllText("data.html", text, Encoding.Default);

 

 

 

 

 

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • uncategorized (2)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (33)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant