C# WebBrowser как программно удалить cookie

139
02 июля 2019, 19:50

у меня вопрос, мне на кнопку нужно повесить два действия, 1 - Это перейти на другую страницу сайта, 2 - Удалить куки WebBrowser (IE 11). Вот код моей кнопки:

private void toolStripButton7_Click(object sender, EventArgs e)
{
    try
    {
        webBrowser1.Navigate("http://site.ru/logout.php");
        Task.Run(() => webBrowser1.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())"));
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

webBrowser1.Navigate - Переходит на страницу логаута (происходит выход пользователя с сайта), далее мне нужно чтоб браузер удалил куки этого сайта, использую Tusk.Run со скриптом найденным в интернете. Но проблема в том, что такая кнопка не работает, а точнее не происходит логаут с сайта, только сбрасываются куки, ни каких ошибок нет, код исполняется, в чем проблема и как её решить я не пойму, помогите пожалуйста решить проблему.

Answer 1

Решение: Как подсказали в комментариях, браузер не успевал переходить по первой ссылке как уже начинал переходить по второй. Решил проблему подписавшись на событие DocumentCompleted, добавлю код решения, вдруг кому пригодится. Кнопка:

private void toolStripButton7_Click(object sender, EventArgs e)
{
    try
    {
        webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
        webBrowser1.Navigate("http://site.ru/logout.php");
        Console.WriteLine("LogOut");
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Метод который срабатывает после нажатия кнопки и после завершения перехода по site.ru/logout.php очищая куки.

public void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var webBrowser = sender as WebBrowser;
    webBrowser.DocumentCompleted -= WebBrowser_DocumentCompleted;
    Task.Run(() => webBrowser1.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())"));
    Console.WriteLine("Clear Cookies");
}
READ ALSO
Не отправляется запрос при использовании другого типа кнопки

Не отправляется запрос при использовании другого типа кнопки

Подскажите пожалуйста почему если использовать AjaxBeginForm, тогда нужно использовать кнопку с типом submit для отправки формы, а если использовать...

134
Не удается вычитать поток данных, всегда пуст

Не удается вычитать поток данных, всегда пуст

Пытаюсь скачать видео (любое) с сервиса Sibnet, провел тестирование получения ссылки на видео-файл, и успешно получаю нормальный Url, но при этом,...

154
Action который принимает разное кол-во аргументов

Action который принимает разное кол-во аргументов

Как мне можно присвоить Action'у методы (разные) с разным кол-вом параметров и при этом параметры разные

135
Как получить полное число перед знаком

Как получить полное число перед знаком

Мне нужно распарсить строкуОна может иметь один из вот таких видов:

125