Как очистить данные с веб-сайта с помощью селена С#?

Я пытаюсь очистить данные с веб-страницы. Однако у меня возникают проблемы со очисткой всех данных в таблице. Мне нужно переключать страницы, чтобы получить все данные, и я хочу получить вывод с помощью DataGridTable. У меня возникли проблемы с выяснением того, как это сделать, хотя количество страниц на веб-сайте изменилось. Я хотел бы автоматически добавлять информацию на страницы таблицы сетки данных по страницам. Мой ввод (веб-сайт) показывает только 25 элементов. Вот почему у меня есть 25 элементов в DataGridTable. Я хотел бы оправдать «количество страниц» от элемента «кнопка перехода к конечной странице». Чтобы моя программа знала, сколько страниц нужно очистить с сайта. но, если есть другой способ, я хочу знать, спасибо.

Это мой код на данный момент.

DataTable dt = new DataTable();

        var header = driver.FindElement(By.CssSelector("#gridComponent > div.k-grid-header"));
        foreach (var row in header.FindElements(By.TagName("tr")))
        {
            //Configure Number of Col and row
            int cellIndex = 0;
            string[] arr = new string[32];

            //Get Cell Data
            foreach (var cell in row.FindElements(By.TagName("th")))
            {
                // Check the header cell for a checkbox child. If no
                // such child exists, add the column.
                var headerCheckboxes = cell.FindElements(By.CssSelector("input[type='checkbox']"));
                if (headerCheckboxes.Count == 0)
                {
                    //Number of Col Data Load
                    if (cellIndex <= 29)
                    {
                        arr[cellIndex] = cell.Text;
                        dt.Columns.Add(cell.Text);
                    }
                    else
                    cellIndex++;
                }
            }
            Console.WriteLine(arr);
        }

        var table = driver.FindElement(By.CssSelector("#gridComponent"));

        //Get Row value
        foreach (var row in table.FindElements(By.TagName("tr")))
        {
            //Configure Number of Col and row
            int cellIndex = 0;

            // Use a list instead of an array
            List<string> arr = new List<string>();

            //Get Cell Data
            foreach (var cell in row.FindElements(By.TagName("td")))
            {
                // Skip the first column in the row by checking
                // if the cell index is 0.
                if (cellIndex != 0)
                {
                    string cellValue = "";
                    Console.WriteLine(cell);
                    var checkboxes = cell.FindElements(By.CssSelector("input[type='checkbox']"));
                    if (checkboxes.Count > 0)
                    {
                        bool isChecked = false;
                        isChecked = checkboxes[0].Selected;
                        cellValue = isChecked.ToString();
                    }
                    else
                    {
                        cellValue = cell.Text;
                    }
                    arr.Add(cellValue);
                }
                cellIndex++;
            }
            dt.Rows.Add(arr.ToArray());
        }
        dataGridView1.DataSource = dt;
        driver.FindElement(By.CssSelector("#gridComponent > div.k-pager-wrap.k-grid-pager.k-widget.k-floatwrap > ul > li:nth-child(3)")).Click();
    }

Это таблица, с которой я пытаюсь соскоблить.

Это код для следующего элемента, показанного на картинке выше.

<a href = "#" aria-label = "Go to the last page" title = "Go to the last page" class = "k-link k-pager-nav k-pager-last" data-page = "3" tabindex = "-1"><span class = "k-icon k-i-arrow-end-right"></span></a>

Большое спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
944
2

Ответы 2

Вы можете рассмотреть индексную информацию «1–25 из 64 элементов», так как это хороший индикатор общего количества страниц.

Пакет = 1–25, т. е. 25 элементов на странице. Всего предметов = 64

Количество страниц = округление (64/25)

PS: Лучший вариант, без каких-либо вычислений, возможно, получить атрибут "data-page" кнопки последней страницы.

Если вы хотите автоматизировать кнопки действий нижнего колонтитула, вы можете перебрать страницы, выполнить действие щелчка и очистить строки, как вы уже делали. Возможно, вы захотите создать метод, который вы можете вызывать и который будет возвращать список строк. Затем вы добавляете к datatable. Всего наилучшего.

Abdulhakeem Abdulrahman 06.02.2019 23:33

Наконец-то я получил ответ на это.

private List<List<string>> GetRecords(IWebElement table)
    {
        List<List<string>> rows = new List<List<string>>(); ;
        //Get Row value
        foreach (var row in table.FindElements(By.TagName("tr")))
        {
            //Configure Number of Col and row
            int cellIndex = 0;

            // Use a list instead of an array
            List<string> cols = new List<string>();

            //Get Cell Data
            foreach (var cell in row.FindElements(By.TagName("td")))
            {
                // Skip the first column in the row by checking
                // if the cell index is 0.
                if (cellIndex != 0)
                {
                    string cellValue = "";
                    Console.WriteLine(cell);
                    var checkboxes = cell.FindElements(By.CssSelector("input[type='checkbox']"));
                    if (checkboxes.Count > 0)
                    {
                        bool isChecked = false;
                        isChecked = checkboxes[0].Selected;
                        cellValue = isChecked.ToString();
                    }
                    else
                    {
                        cellValue = cell.Text;
                    }
                    cols.Add(cellValue);
                }
                cellIndex++;
            }

            rows.Add(cols);
        }

        return rows;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //Configure to Hide CMD
        var chromeDriverService = ChromeDriverService.CreateDefaultService();
        chromeDriverService.HideCommandPromptWindow = true;

        //Configure to Hide Chrome
        ChromeOptions option = new ChromeOptions();
        option.AddArgument("--headless");

        //HIDING CHROME UN-COMMNET THE SECOND ONE TO SHOW

        //IWebDriver driver = new ChromeDriver(chromeDriverService, option);
        IWebDriver driver = new ChromeDriver();


        driver.Url = "**************";
        driver.Manage().Window.Maximize();
        driver.SwitchTo().DefaultContent();

        //Log-in
        driver.FindElement(By.Id("username")).SendKeys("*****");
        driver.FindElement(By.Id("password")).SendKeys("******" + OpenQA.Selenium.Keys.Enter);

        //Entering Access Code
        driver.FindElement(By.Id("password")).SendKeys("*******");
        driver.FindElement(By.Id("accesscode")).SendKeys("********" + OpenQA.Selenium.Keys.Enter);

        //go to CustomerList
        driver.Navigate().GoToUrl("***********");
        driver.Navigate().GoToUrl("*****************");

        //Wait till load 3 seconds
        waitOnPage(2);

        DataTable dt = new DataTable();

        var header = driver.FindElement(By.CssSelector("#gridComponent > div.k-grid-header"));
        foreach (var row in header.FindElements(By.TagName("tr")))
        {
            //Configure Number of Col and row
            int cellIndex = 0;
            string[] arr = new string[32];

            //Get Cell Data
            foreach (var cell in row.FindElements(By.TagName("th")))
            {
                // Check the header cell for a checkbox child. If no
                // such child exists, add the column.
                var headerCheckboxes = cell.FindElements(By.CssSelector("input[type='checkbox']"));
                if (headerCheckboxes.Count == 0)
                {
                    //Number of Col Data Load
                    if (cellIndex <= 29)
                    {
                        arr[cellIndex] = cell.Text;
                        dt.Columns.Add(cell.Text);
                    }
                    else
                    cellIndex++;
                }
            }
            Console.WriteLine(arr);
        }

        var table = driver.FindElement(By.CssSelector("#gridComponent"));


        List<List<string>> records = GetRecords(table);

        // Supposing you want the footer information
        var lastPageStr = table.FindElement(By.ClassName("k-pager-last")).GetAttribute("data-page");
        var lastPage = Convert.ToInt16(lastPageStr);
        // You can select other info lik this


        // class = "k-link k-pager-nav" data-page = "1" 
        driver.FindElement(By.CssSelector("#gridComponent > div.k-pager-wrap.k-grid-pager.k-widget.k-floatwrap > ul > li:nth-child(3)")).Click();

        // Cycle over the pages
        for (int p = 0; p < (lastPage - 1); p++)
        {
            driver.FindElement(By.CssSelector("#gridComponent > div.k-pager-wrap.k-grid-pager.k-widget.k-floatwrap > a:nth-child(4) > span")).Click();
            waitOnPage(2);
            var rows = GetRecords(table);
            records.AddRange(rows);
        }

        // Add all rows to DT
        //dt.Rows.Add(records[4].ToArray());
        foreach(var row in records)
        {
            dt.Rows.Add(row.ToArray());
        }

        dataGridView1.DataSource = dt;
    }

Другие вопросы по теме