Selenium Webdriver C # Загрузка страницы - PullRequest
0 голосов
/ 20 ноября 2018

Я просто экспериментирую с Selenium Webdriver, и у меня происходит пара проблем, которые кажутся связанными, и я хочу прояснить их, прежде чем продолжить. Когда я запускаю код, вставленный внизу, Selenium всегда нужно что-то делать с браузером, и он говорит: «жду [вставить сайт здесь]» некоторое время. Как только это сделано, он, наконец, находит элементы и взаимодействует со страницей. Иногда я получаю различные ошибки, и ошибки не согласованы (но ошибки не нарушают код, просто требуется больше времени, пока Selenium сделает то, что я просил). Время от времени всплывает мой антивирус, который говорит, что он заблокировал веб-сайт (global.ymtracking.com), потому что это было вредоносное ПО. Я чувствую, что это может быть связано с рекламой на веб-странице и с тем, как Selenium загружает веб-страницу, но я не знаю, так как я новичок в этом. У меня никогда не было проблем с посещением этого сайта.

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace WebScrappingTesting
{
    class Program
    {
        static IWebDriver driver;
        static Dictionary<string, Dictionary<string, float>> hockeyStats = new Dictionary<string, Dictionary<string, float>>();
        static string TeamName ="";
        static float TeamAge;
        static float Wins;
        static float Losses;

        static void Main(string[] args)
        {
            driver = new ChromeDriver();

            driver.Navigate().GoToUrl("https://www.hockey-reference.com/leagues/NHL_2019.html");

            using (StreamWriter file = new StreamWriter(@"C:\Users\hockeyData.csv", false))
            {
                file.WriteLine("Team Name,Avg Age,Wins,Losses");
            }

            for (var year = 2019; year > 2015; year--)
            {
                Console.WriteLine($"Getting data for {year}");

                var rowsOfData = driver.FindElements(By.CssSelector("#stats > tbody > tr"));

                for (var i = 1; i <= rowsOfData.Count; i++)
                {
                    TeamName = driver.FindElement(By.CssSelector($"#stats > tbody > tr:nth-child({i}) > td.left > a")).Text;
                    float.TryParse(driver.FindElement(By.CssSelector($"#stats > tbody > tr:nth-child({i}) > td:nth-child(3)")).Text, out TeamAge);
                    float.TryParse(driver.FindElement(By.CssSelector($"#stats > tbody > tr:nth-child({i}) > td:nth-child(5)")).Text, out Wins);
                    float.TryParse(driver.FindElement(By.CssSelector($"#stats > tbody > tr:nth-child({i}) > td:nth-child(6)")).Text, out Losses);
                    // TODO: need to change this to a 3 dim dictionary or an object to be able to also record the year of the data
                    hockeyStats[TeamName] = new Dictionary<string, float>() {
                        { "Age", TeamAge },
                        { "Wins", Wins },
                        { "Losses", Losses }
                    };
                }

                foreach (var item in hockeyStats)
                {
                    Console.WriteLine("=============================================================");
                    Console.WriteLine($"Team Name: {item.Key}, Avg Age: {item.Value["Age"]}");
                    Console.WriteLine($"Wins {item.Value["Wins"]}, Losses {item.Value["Losses"]}");
                }

                using (StreamWriter file = new StreamWriter(@"C:\Users\hockeyData.csv", true))
                {
                    foreach (var item in hockeyStats)
                    {
                        file.WriteLine($"{item.Key},{item.Value["Age"]},{item.Value["Wins"]},{item.Value["Losses"]}");
                    }
                }


                driver.FindElement(By.LinkText("Previous Season")).Click();
                //driver.FindElement(By.CssSelector($"[href*=/leagues/NHL_{year - 1}.html]"));


            }

            Console.WriteLine("=============================================================");
            Console.WriteLine("=============================================================");
            Console.WriteLine(@"You file has been saved to C:\Users\hockeyData.csv");
            Console.WriteLine("=============================================================");
            Console.WriteLine("=============================================================");

            driver.Close();
            driver.Dispose();
        }
    }
}

1 Ответ

0 голосов
/ 20 ноября 2018

Похоже, это было связано с сайтом.Я запустил скрипач, и на фоне этого сайта происходило многое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...