C# 如何在我的程序中登录或登录网站?

C# 如何在我的程序中登录或登录网站?,c#,.net,winforms,C#,.net,Winforms,我想让我的Winforms程序有一个按钮,按下该按钮时会执行以下操作: 打开浏览器 导航到网站 从文件或文本框中读取用户名和密码 登录网站,甚至从我的程序中获取信息并登录 例如,我想用Facebook或论坛这样的网站来实现这一点。 这可能吗?我该怎么做;这在技术上是可能的 对于制作WinForms应用程序,我认为这个网站不合适,因为它涉及的是具体的、狭义的问题 要打开web浏览器、导航到页面和登录,请查看浏览器自动化库。我之所以推荐它,是因为它适用于多种浏览器,而且似乎是最成熟的浏览器。可以使用

我想让我的Winforms程序有一个按钮,按下该按钮时会执行以下操作:

  • 打开浏览器
  • 导航到网站
  • 从文件或文本框中读取用户名和密码
  • 登录网站,甚至从我的程序中获取信息并登录
  • 例如,我想用Facebook或论坛这样的网站来实现这一点。
    这可能吗?我该怎么做;这在技术上是可能的

    对于制作WinForms应用程序,我认为这个网站不合适,因为它涉及的是具体的、狭义的问题

    要打开web浏览器、导航到页面和登录,请查看浏览器自动化库。我之所以推荐它,是因为它适用于多种浏览器,而且似乎是最成熟的浏览器。可以使用将其添加到项目中

    下面是使用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
    }
    
    使用OpenQA.Selenium;
    使用OpenQA.Selenium.Firefox;
    使用制度;
    班级计划
    {
    静态void Main(字符串[]参数)
    {
    var facebookDetails=新WebPageAuthenticationDetails
    {
    HomePageAddress=新Uri(“https://www.facebook.com/"),
    UsernameLocator=By.Id(“电子邮件”),
    PasswordLocator=By.Id(“pass”),
    SubmitLocator=By.XPath(//input[@value='Log-in']),
    };
    //请勿处理此项,否则浏览器将在登录后关闭。
    var browserDriver=new FirefoxDriver();//如果需要,也可以使用其他浏览器(不过Firefox最容易使用)
    var pageAccessor=新的WebPageAccessor(browserDriver,facebookDetails);
    pageAccessor.LogIn(“示例_用户名”、“示例_密码”);
    }
    }
    类网页接受器
    {
    专用只读IWebDriver;
    私有只读WebgeAuthenticationDetails页面详细信息;
    公共WebgeAccessor(IWebDriver驱动程序,WebgeAuthenticationDetails)
    {
    this.driver=driver;
    this.pageDetails=详细信息;
    }
    公共无效登录(字符串用户名、字符串密码)
    {
    driver.Navigate().gotour(pageDetails.HomePageAddress);
    if(pageDetails.LogInLinkLocator!=null)
    单击(pageDetails.LogInLinkLocator);
    类型(pageDetails.UsernameLocator,用户名);
    类型(pageDetails.PasswordLocator,密码);
    单击(pageDetails.SubmitLocator);
    }
    专用空心单击(按定位器)
    {
    driver.FindElement(locator).Click();
    }
    专用空心类型(按字段定位器、字符串文本)
    {
    驱动程序.FindElement(字段定位器).SendKeys(文本);
    }
    }
    类WebPageAuthenticationDetails
    {
    公共Uri主页地址{get;set;}
    /// 
    ///仅当需要首先单击登录链接时才需要。
    /// 
    由LogInLinkLocator{get;set;}公开
    public By UsernameLocator{get;set;}
    通过密码定位器公开{get;set;}
    public By SubmitLocator{get;set;}//因为某些站点不使用HTML提交按钮进行提交
    }
    

    选择浏览器自动化库可能很困难。如果你不知道该用哪一个,只需在谷歌上搜索一下;以前已经讨论过了。

    是的;这在技术上是可能的

    对于制作WinForms应用程序,我认为这个网站不合适,因为它涉及的是具体的、狭义的问题

    要打开web浏览器、导航到页面和登录,请查看浏览器自动化库。我之所以推荐它,是因为它适用于多种浏览器,而且似乎是最成熟的浏览器。可以使用将其添加到项目中

    下面是使用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
    }
    
    使用OpenQA.Selenium;
    使用OpenQA.Selenium.Firefox;
    使用制度;
    班级计划
    {
    静态void Main(字符串[]参数)
    {
    var facebookDetails=新WebPageAuthenticationDetails
    {
    HomePageAddress=新Uri(“https://www.facebook.com/"),
    UsernameLocator=By.Id(“电子邮件”),
    PasswordLocator=By.Id(“pass”),
    SubmitLocator=By.XPath(//input[@value='Log-in']),
    };
    //请勿处理此项,否则浏览器将在登录后关闭。
    var browserDriver=new FirefoxDriver();//如果需要,也可以使用其他浏览器(不过Firefox最容易使用)
    var pageAccessor=新的WebPageAccessor(browserDriver,facebookDetails);
    pageAccessor.LogIn(“示例_用户名”、“示例_密码”);
    }
    }
    类网页接受器
    {
    专用只读IWebDriver;
    私有只读WebgeAuthenticationDetails页面详细信息;
    公共WebgeAccessor(IWebDriver驱动程序,WebgeAuthenticationDetails)
    {
    this.driver=driver;
    this.pageDetails=详细信息;
    }
    公共无效登录(字符串用户名、字符串密码)
    {
    driver.Navigate().gotour(pageDetails.HomePageAddress);
    if(pageDetails.LogInLinkLocator!=null)
    单击(pageDetails.LogInLinkLocator);
    类型(pageDetails.UsernameLocator,用户名);
    类型(pageDetails.PasswordLocator,密码);
    单击(pageDetails.SubmitLocator);
    }
    专用空心单击(按定位器)
    {
    driver.FindElement(locator).Click();
    }
    专用空心类型(按字段定位器、字符串文本)
    {
    驱动程序.FindElement(字段定位器).SendKeys(文本);
    }
    }
    类WebPageAuthenticationDetails
    {
    公共Uri主页地址{get;set;}
    /// 
    ///仅当需要首先单击登录链接时才需要。
    /// 
    由LogInLinkLocator{get;set;}公开
    public By UsernameLocator{get;set;}
    通过密码定位器公开{get;set;}
    public By SubmitLocator{get;set;}//因为某些站点不使用HTML提交按钮进行提交
    }
    

    选择浏览器自动化库可能很困难。如果你不知道该用哪一个,只需在谷歌上搜索一下;这是以前讨论过的。

    您是在寻找类似于1密码的东西吗?不知道为什么有人在下面