Использование Selenium C # для перехода по последней ссылке на веб-странице, которая обновляет - PullRequest
0 голосов
/ 01 декабря 2019

This is the website I am trying to click links on

Итак, я пытаюсь использовать Selenium для очистки этой веб-страницы, которая обновляется каждые пару секунд. Я хочу нажать на самую свежую ссылку, которая в данном случае является ссылкой Эдварда Исследователя. Этот список будет обновляться несколько раз и обновляться, добавляя новые ссылки вверху.

Мой текущий код в основном берет самую верхнюю ссылку всей страницы Like getting hits from the closed new hits tab here, когда я хочу, чтобы он брал ссылки, показанные на странице, начиная с верхней части

  allLinks = driver.FindElements(By.XPath("/html/body/div[6]//a")).ToHashSet();

Это будетполучить все кликабельные ссылки сверху вниз, используя теги для захвата ссылок. Моя проблема заключается в попытке получить ссылки только из одного места на веб-странице и получать эту ссылку при каждом обновлении. Не совсем уверен, как это сделать, так как код и xPath меняются с каждой добавленной ссылкой. Любая помощь будет принята с благодарностью

HTML CODE:

Самая нижняя отметка красного цвета - это текущая ссылка, которую я проверял, самая верхняя, но когда страница обновляется новыми ссылками, две верхние красныеотметки, где они будут обновлены в другом DIV.

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

 public static void searchAllLinks()
    {
        //HitForker is labelled as '0'
        //PandaCrazy tab is labellled as '1'
        //Start index at 1
        int listIndex = 1;

        //Different numbers need for the first run down the list 
        bool firstRun = true;

        //HashSet to store all IWebElements found on page at runtime 
        HashSet<IWebElement> allLinks;

        //Get browser tabs open at current time 
        var browserTabs = driver.WindowHandles;

        //Switch to HF
        driver.SwitchTo().Window(driver.WindowHandles[0]);

        //Grab links from page starting at Logged Hits Most recent Div
        allLinks = driver.FindElements(By.XPath("/html/body/div[6]//a")).ToHashSet();

        //Loop through all links in hash
        //Hashset contains every link on the page. Only need the middle link to access the content 
        foreach(IWebElement value in allLinks)
        {
            if(firstRun == true)
            {
                //Second link in the hash
                if(listIndex == 2)
                {
                    value.Click();
                    firstRun = false;
                    listIndex = 0;
                    whatToClick(value);
                }
            }
            //When linkIndex is 5 then click the value and reset to 0
            if(listIndex == 5)
            {
                value.Click();
                whatToClick(value);
                listIndex = 0;
            }

            listIndex++;

        }

    }
    //Method to find which webpage opened on successfull click 
    public static void whatToClick(IWebElement currentLink)
    {
        //Grabs the browser handles open
        var browserTabs = driver.WindowHandles;

        //When the link is clicked on switch to that tab
        driver.SwitchTo().Window(driver.WindowHandles[2]);

        //2 options
            //Hit is not available then add to PC
            //Hit is available then accept 
        try
        {
            if (driver.FindElement(By.XPath("/html/body/div[3]/div[2]/div/div/div/div[2]/p/span/span/button[2]")).Displayed == true)
            {
                driver.FindElement(By.XPath("/html/body/div[3]/div[2]/div/div/div/div[2]/p/span/span/button[2]")).Click();
                driver.Close();

            }
            else
            {
                driver.Close();
                driver.SwitchTo().Window(driver.WindowHandles[0]);
            }

            //Switch Back to the HF
            driver.SwitchTo().Window(driver.WindowHandles[0]);

        //Catch exception to catch if the hit cannot be accepted
        } catch (OpenQA.Selenium.NoSuchElementException e )
        {
            if (driver.FindElement(By.XPath("/html/body/div[2]/div[1]/nav/div/div[1]/div/div[3]/span/span/button")).Displayed == true)
            {
                driver.FindElement(By.XPath("/html/body/div[2]/div[1]/nav/div/div[1]/div/div[3]/span/span/button")).Click();
                driver.Close();

            }

            driver.SwitchTo().Window(driver.WindowHandles[0]);
        }
        catch (OpenQA.Selenium.NoSuchWindowException w)
        {
            Console.WriteLine("Window Not open");
        }


    }

1 Ответ

0 голосов
/ 02 декабря 2019

Пожалуйста, щелкните по элементу, используя относительный xpath, следующим образом

driver.FindElement(By.Xpath("//div[@id='log_table']/div[0]/div/div[1]/span[1]//a")).Click()

Приведенный выше xpath сосредоточится на первой таблице и получит доступ к гиперссылке этого.

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