退会する前に、会報をダウンロードしておかねば。
というわけで、WatiNのサンプルです。IE9ではダウンロードがうまくいきません。IE8でも、やや不安定ですが、1万個のうち数十個のpdfが抜けてもこまりゃしないでしょ?
// ブラウザを起動
var browser = new IE();
// トップページへ移動
browser.GoTo("http://www.bookpark.ne.jp/ipsj/");
// ログイン
try
{
browser.TextField(Find.ByName("name")).TypeText("ユーザID");
browser.TextField(Find.ByName("password")).TypeText("パスワード");
browser.Image(Find.BySrc("http://www.bookpark.ne.jp/ipsj/img/login.gif")).Click();
}
catch
{
System.Console.WriteLine("ログイン済み");
}
// 会報
browser.GoTo("http://www.bookpark.ne.jp/cm/ipsj/select.asp?category1=Magazine&mode=PDF");
// ダウンロード
// IReturnDialogHandler returnDialogHandler = ReturnDialogHandler.CreateInstance();
// browser.AddDialogHandler( returnDialogHandler );
// 次ページ(ページをスキップ)
// /cm/negi/pagenext.gif
for (int i = 0; i < 174; i++)
{
browser.Image(Find.BySrc("http://www.bookpark.ne.jp/cm/negi/pagenext.gif")).Click();
}
while (true)
{
foreach (Link link in browser.Links)
{
string href = link.Url.ToString();
if (href.StartsWith("http://shelf3.bookpark.ne.jp/pdf/view.asp?site_id=IPSJ")
&& !href.Contains("nf=view"))
{
Regex reg = new Regex("of=(?<name>.*)&nf");
Match m = reg.Match(href);
string name = m.Groups["name"].Value;
FileDownloadHandler fileDownloadHandler = new FileDownloadHandler(name + ".pdf");
System.Threading.Thread.Sleep(500);
browser.AddDialogHandler(fileDownloadHandler);
System.Threading.Thread.Sleep(300);
link.ClickNoWait();
System.Threading.Thread.Sleep(300);
try
{
fileDownloadHandler.WaitUntilFileDownloadDialogIsHandled(20);
fileDownloadHandler.WaitUntilDownloadCompleted(120);
}
catch
{
System.Console.WriteLine("ダウンロード失敗?");
}
System.Threading.Thread.Sleep(300);
browser.Re
moveDialogHandler(fileDownloadHandler);
}
}
// 次ページ
// /cm/negi/pagenext.gif
browser.Image(Find.BySrc("http://www.bookpark.ne.jp/cm/negi/pagenext.gif")).Click();
}
return;
モリモリダウンロード。
このプログラムを動かして体感したのは、
WatiNて、ダイアログが絡むと信頼性低いな~
です。
# だから「なんでもかんでもOKボタンを押す」コードがもてはやされるわけですかね。