Всем привет, есть такой код который я не могу допилить чтобы он выполнял одно и то же действие до определённого периода т.е. количества. Ребята пожалуйста помогите!
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);
});
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как можно получить с помощью библиотеки AsterNET получить ссылку на файл записи разговора в Asterisk? Есть CRM, в ней есть библиотека AsterNETПри входящем...
на шарпе написана DLL вызывается в С++, в DLL передаю строку и обратно должен получить строку, но как ее вывести на экран
Необходимо вывести на странице с галереей изображения в том порядке в котором я их располагаю в редакторе gutenberg, а wp выводит их в порядке добавления...
Установил Apache2 и MySQL, настроил их, установил root пароль, в саму базу данных через консоль и root пароль заходит, а в phpMyAdmin никак не получаетсяВ...