Я хочу нажать на все ссылки с текстом «300». Мой код для просмотра веб-страниц нажимает на каждую ссылку очень медленно. Я сохраняю ссылки в списке и нажимаю их по одной.
Я считаю ссылки для индексации, а затем использую для (int pos = 0; pos https://www.w3schools.com/html/default.asp] и очень отзывчивый, но на другом сайте он очень медленный.
class Program
{
private static IWebDriver driver = null;
static void Main(string[] args)
{
driver = new InternetExplorerDriver();
driver.Manage().Window.Maximize();
driver.Navigate().GoToUrl("https://arbitrary.com/");
clickAllLinks("300");
}
//clicking links AND get data
public static void clickAllLinks(string tagName)
{
IWebElement element =
driver.FindElement(By.XPath("//div[@class='data']"));
int elements =
element.FindElements(By.PartialLinkText(tagName)).Count();
for (int pos = 0; pos < elements; pos++)
{
getElementWithIndex(By.PartialLinkText(tagName), pos).Click();
//fetchdata();
}
}
public static IWebElement getElementWithIndex(By by, int pos)
{
IWebElement element =
driver.FindElement(By.XPath("//div[@class='data']"));
IList<IWebElement> elements =
element.FindElements(By.PartialLinkText("300"));
return elements.ElementAt(pos);
}
//scrape data
public static async void fetchdata()
{
string currentURL = driver.Url; //url to string
Console.WriteLine("URL: " + currentURL);
var httpclient = new HttpClient();
var html = await httpclient.GetStringAsync(currentURL);
var htmldoc = new HtmlDocument();
htmldoc.LoadHtml(html); //html to htmldoc
List<List<string>> Receipt =
htmldoc.DocumentNode.SelectSingleNode("//table[@class='classname']")
//htmldoc into list TABLE->TR->TD->InnerText
.Descendants("tr")
.Where(tr => tr.Elements("td").Count() > 0)
.Select(tr => tr.Elements("td")
.ToList())
.ToList();