C# 我想获得web驱动程序的实例并使用它

C# 我想获得web驱动程序的实例并使用它,c#,C#,好了,伙计们!我更改了代码,我想提出更具体的问题 我希望尽可能多次以循环的形式运行我的GetInformation() 如果值在网站上不可用,我想运行另一个函数() 如何使用web驱动程序实例运行GetInformation()?我对OOP没有信心,但我只想启动浏览器一次,然后从网站获取非静态信息。 Web浏览器只能运行一次 namespace Parser { class Program { public static string CommandNa

好了,伙计们!我更改了代码,我想提出更具体的问题

我希望尽可能多次以循环的形式运行我的
GetInformation()

如果值在网站上不可用,我想运行另一个函数()

如何使用web驱动程序实例运行
GetInformation()
?我对OOP没有信心,但我只想启动浏览器一次,然后从网站获取非静态信息。
Web浏览器只能运行一次

     namespace Parser
{
    class Program
    {
        public static string CommandName1;
        public static string CommandName2;
        public static string Command1Goals;
        public static string Command2Goals;
        public static string TimeOfGame; //timer eeeeeeeee
        public static int TotalGoals;
        public static bool GameIsRun = true;
        static void Main(string[] args)
        {
            var driver = GetDriver();
            GetInformation(driver);
        }

        public static ChromeDriver GetDriver()
        {
            return new ChromeDriver();
        }

        public static void CheckGame()
        {
            var driver = GetDriver();
            while (GameIsRun)
            {
                GetInformation(GetDriver());
            }
        }

        static void GetInformation(ChromeDriver driver)
        {
            driver.Navigate().GoToUrl("https://m.favorit.com.ua/uk/live/events/13931514/");
            System.Threading.Thread.Sleep(3000);
            CommandName1 = driver.FindElement(By.XPath(".//*[@id='react-root']/div/div[2]/div/div[1]/div/div[1]/div/div[1]/div/header/div[2]/span[1]")).GetAttribute("innerHTML");
            CommandName2 = driver.FindElement(By.XPath(".//*[@id='react-root']/div/div[2]/div/div[1]/div/div[1]/div/div[1]/div/header/div[2]/span[2]")).GetAttribute("innerHTML");
            Command1Goals = driver.FindElement(By.XPath(".//*[@id='react-root']/div/div[2]/div/div[1]/div/div[1]/div/div[1]/div/header/div[4]/div[1]/div[1]")).GetAttribute("innerHTML");
            Command2Goals = driver.FindElement(By.XPath(".//*[@id='react-root']/div/div[2]/div/div[1]/div/div[1]/div/div[1]/div/header/div[4]/div[1]/div[2]")).GetAttribute("innerHTML");
            TimeOfGame = driver.FindElement(By.XPath("html/body/div/div/div//div/div[@class='headroom-wrapper']/div//div[3]/div")).GetAttribute("innerHTML"); ; //timer eeeeeeeee
            TotalGoals = Convert.ToInt32(Command1Goals) + Convert.ToInt32(Command2Goals);
            Console.WriteLine("Time: " + TimeOfGame + " \t\t|Total Goals: " + TotalGoals);
            Console.OutputEncoding = Encoding.UTF8;
            Console.WriteLine("Team 1: " + CommandName1 + " \t|Goals: " + Command1Goals);
            Console.WriteLine("Team 2: " + CommandName2 + " \t|Goals: " + Command2Goals);
            System.Threading.Thread.Sleep(5000);
        }

        public static void AnotherFunction()
        {

        }
    }
}

这里要做的是遵循一些好的OOP原则,让您的方法只做一件事

您需要一个方法来实例化chrome Driver()对象并返回它,然后您需要一个参数来传递驱动程序

类似这样的东西(我把你的大部分代码都删掉了,因为这只是噪音)

然后在检查游戏中我们可以做

var driver = GetDriver();
while(GameIsRun)
{
    GetInformation(driver);
}

有人在评论中提到,您可能会遇到一些无限循环问题,但您还不清楚您希望程序如何工作,因此我可以在没有更多信息的情况下帮助您解决这些问题。

“有人可以修复我的代码吗”非常模糊。“我不想谷歌chrome启动很多次”令人担忧,但并不清楚。什么是?到底出了什么问题?我对整件事没有任何意义。请更加努力地帮助我们帮助你。你想提供足够的信息,我们唯一需要弄清楚的就是让你困惑的一点。如果我们绞尽脑汁想弄明白你到底有什么问题,那就是你帮得不够。顺便说一句,我没有投你反对票。告诉我们你想要实现什么,让人们尽可能容易地帮助你。他们这么做是出于好意,所以提问者能做的最起码的问题就是解释问题。检查一下,代码中有一条通向无限递归的清晰路径。您需要一个基本情况来停止对CheckGame()和GetInformation()方法的递归。也许您应该从GetInformation()方法中删除对CheckGame()的调用,并更改CheckGame()中的逻辑以不同方式处理重试。我希望有机会在另一个类中使用我的驱动程序,而不必再次启动它。我想我的浏览器只启动一次,然后我就能一次又一次地获取信息()。对不起,我只是觉得我的代码很简单。对不起,非常感谢。我根据你的建议修改了密码。你能再检查一下吗?我对OOP没有信心,也不知道如何使用驱动程序实例。@Vee您需要将GetDriver()的返回值传递到GetInformation方法中。有两种方法可以做到这一点。将其存储在局部变量
var driver=GetChromeDriver()中;获取信息(驱动程序)
或只是将方法调用的结果传递到GetInformation方法中,如
GetInformation(GetChromeDriver())不要误会,但可能值得一看C语言的一些基础知识,做一些关于方法和类等的入门知识,我刚刚开始学习C语言,我决定做代码。因此,我与问题发生了冲突。@他们认为做一些你觉得有用和有趣的东西很好,我认为这有助于学习过程。但在你能走路之前不要跑
var driver = GetDriver();
while(GameIsRun)
{
    GetInformation(driver);
}