Программная автоматизация веб-входа - PullRequest
1 голос
/ 27 мая 2010

Я пытаюсь создать приложение C # Winforms, которое автоматически регистрирует меня на сайте и загружает данные. В частности, я хочу, чтобы мое приложение автоматически заходило на мой сайт онлайн-банкинга, входило в систему и загружало историю транзакций. Я могу сделать это вручную, войдя в систему через веб-браузер и загрузив его. Я пытаюсь автоматизировать это. Я знаю, что мне, вероятно, нужно использовать HttpWebRequest и HttpWebResponse. У кого-нибудь есть пример этого или структура шагов, которые мне нужно предпринять для достижения этой цели? Имейте в виду, что это будет защищенный сайт (https), и мне как-то придется собирать информацию о сеансе и сохранять информацию о сеансе в течение всего сеанса. Есть мысли?

Ответы [ 5 ]

4 голосов
/ 27 мая 2010
using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace testSSL
{
    public partial class FormDownload : Form
    {
        private bool success;
        private const string filename = "file.txt";
        private const string url_string = "https://some.url.com";
        private Uri url;
    public FormDownload()
    {
        InitializeComponent();
        success = false;
        url = new Uri(url_string);
    }

    public bool StartDownload()
    {
        this.ShowDialog();
        return success;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Activate();

        progressBar1.Maximum = 100;
        label1.Text = "Working";

        WebClient client = new WebClient();
        client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
        client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);

        //possible fix for running on w2k
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

        string user="user", pass="pass";
        client.Credentials = new NetworkCredential(user, pass);
        try
        {
            client.DownloadFileAsync(url, filename);
        }
        catch (Exception ue)
        {
            writeException(ue.Message);
        }

    }

    void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            writeException(e.Error.Message);
            success = false;
        }
        else
        {
            label1.Text = "Done";
            System.Threading.Thread.Sleep(100);
            success = true;
        }
        this.Close();
    }

    void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

    private void writeException(string ex)
    {
        ex = "Date: " + DateTime.Now.ToString() + " Exception: " + ex + "\r\n";
        File.AppendAllText("downloadLog.txt", ex);
        MessageBox.Show("An error has occurred; it has been logged");
        this.Close();
    }
}

}

3 голосов
/ 27 мая 2010

Взгляните на Selenium , с этим вы можете автоматизировать последовательность взаимодействий между пользователем и браузером.

Возможно, вам повезет, если вы сможете использовать веб-запрос и ответ при входе в систему, хотя многие банки переходят на формы входа в систему на основе javascript, чтобы запутать пароли для предотвращения троянов. См. Ситибанк (AU) и Westpac (AU) . Это может быть достаточно сложно обойти, чтобы вам пришлось прибегнуть к ручному входу в систему и наличию скрипта GreaseMonkey для автоматизации загрузки.

Ради интереса, стоит также немного изучить банковские трояны и то, как они обрабатывают автоматизированные действия от имени пользователя. См. Банковский троян Зевса .

2 голосов
/ 29 мая 2010

Просмотр спецификации Open Financial Exchange . Так Quicken / Money и т. Д. Загружают транзакции из ваших финансовых учреждений.

0 голосов
/ 04 июля 2014

Хорошо, если невозможно подключиться к банковскому веб-сайту и загрузить транзакции программным способом (могу вас заверить, это не так - почти Все, что может сделать пользователь, может быть сделано с помощью кода с достаточной изобретательностью ) Почему существуют приложения для iOS, которые могут это сделать? Я знаю, потому что я использую одно из этих приложений на регулярной основе. Более того, я думаю, что Quickbooks Enterprise на это способен (но не цитируйте меня об этом).

Единственное, о чем я могу подумать, это указать, что вы НЕ МОЖЕТЕ сделать это, если у создателей приложений для iOS будет какое-то соглашение со всеми различными банками и компаниями-эмитентами кредитных карт. Я почему-то сомневаюсь в этом, но думаю, что это возможно.

0 голосов
/ 27 мая 2010

Автоматизация браузера (см. Ссылку ниже) может быть полезна.

Но помните ... страница входа - это действительно сложное клиентское приложение, способное формировать сложный, даже зашифрованный веб-запрос. Таким образом, обходя то, что вы можете воспринимать как простой интерфейс, вы фактически обойдете целое клиентское приложение (которое может сформулировать простой HTTP POST или может выполнить некоторые сложные JavaScript-манипуляции с последующим подключением к флеш-плееру, а затем прямым подключением). на сервер входа в систему, но вы получите точку). Интерфейс входа в систему (на самом деле, в настоящее время это, возможно, небольшое приложение) может в любое время кардинально обновиться, что приведет к аннулированию вашего программного обеспечения для автоматического входа.

Итак ... вы можете захотеть использовать что-то, что может автоматизировать это на высоком уровне, работая с доступным интерфейсом (вместо того, чтобы обойти это и пытаться сформулировать свои собственные HTTP-запросы), и что-то вроде http://seleniumhq.org/ может помочь.

Просто будьте осторожны при написании программного обеспечения, которое слепо отправляет ваши учетные данные на веб-страницу. Вы не можете следить за ним, когда происходит угон страницы или страница по какой-то причине неожиданно не зашифрована. Просто мысль.

...