Всем привет, есть такой код который я не могу допилить чтобы он выполнял одно и то же действие до определённого периода т.е. количества. Ребята пожалуйста помогите!
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using Keys = System.Windows.Forms.Keys;
namespace SearchNewsWithGoogle
{
public partial class Form1 : Form
{
IWebDriver Browser;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
((IJavaScriptExecutor)Browser).ExecuteScript("window.open();");
Browser.SwitchTo().Window(Browser.WindowHandles.Last());
Browser.Navigate().GoToUrl("https://yandex.ru");
System.Threading.Thread.Sleep(5000);
List<IWebElement> News = Browser.FindElements(By.CssSelector("#tabnews_newsc a")).ToList();
{
for (int i = 0; i < 1000; i++)
{
string s = News[i].Text;
if (s.StartsWith("c"))
{
((IJavaScriptExecutor)Browser).ExecuteScript("window.open();");
Browser.SwitchTo().Window(Browser.WindowHandles.Last());
Browser.Navigate().GoToUrl("http://google.com");
System.Threading.Thread.Sleep(5000);
IWebElement SearchInput = Browser.FindElement(By.Id("searchform"));
System.Threading.Thread.Sleep(5000);
SearchInput.SendKeys(s + OpenQA.Selenium.Keys.Enter);
System.Threading.Thread.Sleep(10000);
var tabs = Browser.WindowHandles;
if (tabs.Count > 1)
{
Browser.SwitchTo().Window(tabs[2]);
Browser.Close();
Browser.SwitchTo().Window(tabs[1]);
Browser.Close();
Browser.SwitchTo().Window(tabs[0]);
}
return;
}
}
}
}
}
} }
выносим некоторые общие методы в расширения:
public static class WebDriverExt
{
public static void OpenNewTab(this IWebDriver driver)
{
((IJavaScriptExecutor)driver).ExecuteScript("window.open();");
driver.SwitchTo().Window(driver.WindowHandles.Last());
}
public static List<IWebElement> WaitElements(this IWebDriver driver, By elementLocator, int timeoutMs = 10000)
{
try
{
var wait = new WebDriverWait(driver, TimeSpan.FromMilliseconds(timeoutMs));
var result = wait.Until(d => d.FindElements(elementLocator));
return result.ToList();
}
catch (NoSuchElementException)
{
Console.WriteLine($"Элементы не были найдены за {timeoutMs}ms");
throw;
}
}
}
а теперь вызывающий код. я позволил себе немного его "причесать". логику закрытия вкладок я совсем не понял, поэтому оставлю ее вам
public static void Run()
{
IWebDriver Browser = new ChromeDriver();
Browser.Navigate().GoToUrl("https://yandex.ru");
Browser
.WaitElements(By.CssSelector("#tabnews_newsc a"))
.Select(n=> n.Text)
//.Where(s=> s.StartsWith("с")) // внимание, русское "с"
.Take(10) // берем 10 первых элементов
.ToList()
.ForEach(s =>
{
Browser.OpenNewTab();
Browser.Navigate().GoToUrl("http://google.com");
var searchInput = Browser
.WaitElements(By.XPath("//form//input[@type='text']"))
.First();
searchInput.Click();
searchInput.SendKeys(s + Keys.Enter);
Thread.Sleep(5000);
});
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости