
Итак, я пытаюсь использовать Selenium для очистки этой веб-страницы, которая обновляется каждые пару секунд. Я хочу нажать на самую свежую ссылку, которая в данном случае является ссылкой Эдварда Исследователя. Этот список будет обновляться несколько раз и обновляться, добавляя новые ссылки вверху.
Мой текущий код в основном берет самую верхнюю ссылку всей страницы
, когда я хочу, чтобы он брал ссылки, показанные на странице, начиная с верхней части
allLinks = driver.FindElements(By.XPath("/html/body/div[6]//a")).ToHashSet();
Это будетполучить все кликабельные ссылки сверху вниз, используя теги для захвата ссылок. Моя проблема заключается в попытке получить ссылки только из одного места на веб-странице и получать эту ссылку при каждом обновлении. Не совсем уверен, как это сделать, так как код и xPath меняются с каждой добавленной ссылкой. Любая помощь будет принята с благодарностью

Самая нижняя отметка красного цвета - это текущая ссылка, которую я проверял, самая верхняя, но когда страница обновляется новыми ссылками, две верхние красныеотметки, где они будут обновлены в другом 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");
}
}