サイトに自動的にログインしてデータをダウンロードする C# Winforms アプリケーションを作成しようとしています。具体的には、アプリケーションがオンライン バンキング サイトに自動的にログインし、ログインして、取引履歴をダウンロードするようにしたいと考えています。これは、Web ブラウザーからログインしてダウンロードすることで、手動で行うことができます。これを自動化しようとしています。おそらく HttpWebRequest と HttpWebResponse を使用する必要があることはわかっています。これの例や、これを達成するために必要な手順のフレームワークを持っている人はいますか? 安全なサイト (https) であり、何らかの方法でセッション情報を収集し、セッション中はセッション情報を保持する必要があることに注意してください。何かご意見は?
5 に答える
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();
}
}
}
Seleniumを見てください。これにより、ユーザーとブラウザーの間の一連の対話を自動化できます。
多くの銀行は、トロイの木馬を防ぐためにパスワードを難読化するために javascript ベースのログイン フォームに移行していますが、ログインに Web リクエストとレスポンスを使用できるだけで幸運かもしれません。Citibank (AU)およびWestpac (AU ) を参照してください。手動でログインし、 GreaseMonkeyスクリプトでダウンロードを自動化する必要があることを回避するのは難しいかもしれません。
関心のために、バンキング型トロイの木馬と、ユーザーに代わって自動化されたアクションをどのように処理するかについて調査することも価値があります。Zeus バンキング トロイの木馬を参照してください。
Open Financial Exchangeの仕様を調べてください。これが、Quicken/Money などが金融機関からトランザクションをダウンロードする方法です。
ブラウザの自動化 (以下のリンクを参照) が役立つ場合があります。
しかし覚えておいてください...ログインページは実際には複雑なクライアントアプリケーションであり、複雑な、さらには暗号化された Web リクエストを形成することができます。そのため、単なるインターフェースと思われるものを回避することで、実際にはクライアント アプリ全体を回避していることになります (単純な HTTP POST を作成したり、複雑な JavaScript 操作を実行したり、Flash Player に接続したり、直接接続したりすることができます)。ログインサーバーに接続しますが、要点はわかります)。ログイン インターフェース (現在は本当に小さなアプリの可能性があります) は、いつでも大幅に更新され、自動ログイン ソフトウェアが無効になる可能性があります。
そのため...高レベルで自動化できるものを使用し、利用可能なインターフェースを使用して (それを回避して独自の HTTP 要求を作成しようとするのではなく)、http://seleniumhq.org/のようなものを使用することをお勧めします。役立つかもしれません。
やみくもにクレデンシャルを Web ページに送信するソフトウェアの作成には注意してください。ページのハイジャックが発生した場合や、ページが何らかの理由で突然暗号化されていない場合に、監視する必要はありません。ちょっとした考え。