Winforms プログラムにボタンを持たせたいと思います。ボタンを押すと、次のようになります。
- ブラウザを開く
- Web サイトに移動する
- ファイルまたはテキストボックスからユーザー名とパスワードを読み取ります
- Web サイトにログインするか、プログラムから情報を取得してサインインします。
たとえば、Facebook やフォーラムなどのサイトでこれを行いたいと考えています。これは可能ですか、どうすればできますか?
はい; これは技術的に可能です。
WinForms アプリケーションを作成する場合、このサイトは適切ではないと思います。特定の狭い質問に関するものだからです。
Web ブラウザーを開く、ページに移動する、およびログインするには、ブラウザー自動化ライブラリーを調べます。Selenium Webdriverをお勧めします。これは、いくつかのブラウザーで動作し、最も成熟したブラウザーと思われるためです。NuGetを使用してプロジェクトに追加できます。
Facebook でこれを行うためのコード例を次に示します。
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using System;
class Program
{
static void Main(string[] args)
{
var facebookDetails = new WebPageAuthenticationDetails
{
HomePageAddress = new Uri("https://www.facebook.com/"),
UsernameLocator = By.Id("email"),
PasswordLocator = By.Id("pass"),
SubmitLocator = By.XPath("//input[@value='Log in']"),
};
//Don't dispose this or the browser will be closed after logging in.
var browserDriver = new FirefoxDriver(); //Or use a different browser if you want (Firefox is easiest to use, though)
var pageAccessor = new WebPageAccessor(browserDriver, facebookDetails);
pageAccessor.LogIn("example_username", "example_password");
}
}
class WebPageAccessor
{
private readonly IWebDriver driver;
private readonly WebPageAuthenticationDetails pageDetails;
public WebPageAccessor(IWebDriver driver, WebPageAuthenticationDetails details)
{
this.driver = driver;
this.pageDetails = details;
}
public void LogIn(string username, string password)
{
driver.Navigate().GoToUrl(pageDetails.HomePageAddress);
if (pageDetails.LogInLinkLocator != null)
Click(pageDetails.LogInLinkLocator);
Type(pageDetails.UsernameLocator, username);
Type(pageDetails.PasswordLocator, password);
Click(pageDetails.SubmitLocator);
}
private void Click(By locator)
{
driver.FindElement(locator).Click();
}
private void Type(By fieldLocator, string text)
{
driver.FindElement(fieldLocator).SendKeys(text);
}
}
class WebPageAuthenticationDetails
{
public Uri HomePageAddress { get; set; }
/// <summary>
/// Only needed if a log-in link first needs to be clicked.
/// </summary>
public By LogInLinkLocator { get; set; }
public By UsernameLocator { get; set; }
public By PasswordLocator { get; set; }
public By SubmitLocator { get; set; } //Because some sites don't use HTML submit buttons to submit
}
ブラウザー自動化ライブラリーの選択は難しい場合があります。どちらを使用すればよいかわからない場合は、Google 検索を行ってください。それは以前に議論されています。