0

Winforms プログラムにボタンを持たせたいと思います。ボタンを押すと、次のようになります。

  1. ブラウザを開く
  2. Web サイトに移動する
  3. ファイルまたはテキストボックスからユーザー名とパスワードを読み取ります
  4. Web サイトにログインするか、プログラムから情報を取得してサインインします。

たとえば、Facebook やフォーラムなどのサイトでこれを行いたいと考えています。これは可能ですか、どうすればできますか?

4

1 に答える 1

3

はい; これは技術的に可能です。

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 検索を行ってください。それは以前に議論されています。

于 2013-09-20T10:14:13.870 に答える