[РЕШЕНО] Как сделать 5 Xpath кликов в 1 секунду?

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Доброго времени. Нужно в одном казино - сделать быстрые 5 кликов в секунду на 1 фишку.
1. Простой клик, сайт не хочет засчитывать:
Простой клик:
var el_col2 = instance.ActiveTab.FindElementsByXPath(String.Format("//*[name()='svg']", "innerhtml"));
var he2 = el_col2.Elements[0];
he2.Click();
2. Если использовать Точ, тогда клики засчитываются, но выходит сделать макс скорость 1 клик в 1 секунду примерно:
C#:
var el_col = instance.ActiveTab.FindElementsByXPath(String.Format("//*[name()='svg']", "innerhtml"));
var he = el_col2.Elements[0];
instance.ActiveTab.Touch.Touch(he, 0);
 
Последнее редактирование:

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 261
Благодарностей
679
Баллы
113
Доброго времени. Нужно в одном казино - сделать быстрые 5 кликов в секунду на 1 фишку.
1. Простой клик, сайт не хочет засчитывать:
Простой клик:
var el_col2 = instance.ActiveTab.FindElementsByXPath(String.Format("//*[name()='svg']", "innerhtml"));
var he2 = el_col2.Elements[0];
he2.Click();
2. Если использовать Точ, тогда клики засчитываются, но выходит сделать макс скорость 1 клик в 1 секунду примерно:
C#:
var el_col = instance.ActiveTab.FindElementsByXPath(String.Format("//*[name()='svg']", "innerhtml"));
var he = el_col2.Elements[0];
instance.ActiveTab.Touch.Touch(he, 0);
Готов предположить что имеет смысл думать в сторону Thread
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 261
Благодарностей
679
Баллы
113
  • Спасибо
Реакции: Mikhail B.

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 261
Благодарностей
679
Баллы
113
Не совсем понятно о чем речь и как его применять.
Сам плотно с этим способом не работал, поэтому может выглядеть немного через жопу) Ну в целом суть такая, подключаешь в юзингах System.Threading;

Создаешь метод который будет делать клик

C#:
        static void TouchMethod()
        {
                Console.WriteLine("Клик1");
        }
Потом делается делегат ThreadStart и в него помещается твой метод.

C#:
 ThreadStart touch = new ThreadStart(TouchMethod);
Потом в экземпляр класса Thread надо поместить вот этот делегат с методом

C#:
 Thread thread = new Thread(touch);
И за тем с помощью метода start у класса thread ты этот метод который поместил в делегат запускаешь.

C#:
thread.Start();
В итоге у тебя метод который ты запустил таким образом начнет выполняться, а код дальше продолжит работать, не ожидая пока метод выполнится.

Можешь закинуть вот этот код в визуал студию и посмотреть как он будет выполняться.


C#:
using System;
using System.Threading;

namespace ConsoleApp61
{
    class Program
    {



        static void TouchMethod()
        {
            while (true)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Клик1");
            }
        
        }

        static void Main(string[] args)
        {
            ThreadStart touch = new ThreadStart(TouchMethod);
            Thread thread = new Thread(touch);
            thread.Start();
            while (true)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Клик2");
            }
        
        }
    }
}
В итоге, таким образом ты можешь сделать 5 потоков, где каждый будет делать 1 клик. И чисто теоретически это должно ускорить выполнение кликов
 
Последнее редактирование:
  • Спасибо
Реакции: Gunjubasik

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Сам плотно с этим способом не работал, поэтому может выглядеть немного через жопу) Ну в целом суть такая, подключаешь в юзингах System.Threading;

Создаешь метод который будет делать клик



В итоге, таким образом ты можешь сделать 5 потоков, где каждый будет делать 1 клик. И чисто теоретически это должно ускорить выполнение кликов
Спасибо. Запишу, позже разберу. Решил методом кликов по координатам, шустро выходит. Оставлю тут, кому-то да пригодится:
C#:
// Поиск всех элементов с помощью Xpath
var el_col = instance.ActiveTab.FindElementsByXPath(String.Format("//*[name()='svg']", "innerhtml"));
// Запись Первого Элемента
var he = el_col2.Elements[0];
// Делаем клик по первому элементу с помощью координат элемента
instance.ActiveTab.MouseClick(he.DisplacementInTabWindow.X + 10, he.DisplacementInTabWindow.Y + 20, "left", "click");
 
Последнее редактирование:
  • Спасибо
Реакции: Mikhail B.

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
Спасибо. Запишу, позже разберу. Решил методом кликов по координатам, шустро выходит. Оставлю тут, кому-то да пригодится:
C#:
// Поиск всех элементов с помощью Xpath
var el_col = instance.ActiveTab.FindElementsByXPath(String.Format("//*[name()='svg']", "innerhtml"));
// Запись Первого Элемента
var he = el_col2.Elements[0];
// Делаем клик по первому элементу с помощью координат элемента
instance.ActiveTab.MouseClick(he.DisplacementInTabWindow.X + 10, he.DisplacementInTabWindow.Y + 20, "left", "click");
C#:
HtmlElementCollection el_col =  instance.ActiveTab.FindElementsByXPath(String.Format("//*[name()='svg']", "innerhtml"));

List<HtmlElement> list = new List<HtmlElement>();
if(el_col.Elements.Length > 0) {
    for(int i=0;i<100;i++)     list.Add(el_col.Elements.First()); // Сколько кликов надо
}

list.AsParallel().ForAll(x=> x.Click()); // асинхронно кликаем по всем элементам
 
  • Спасибо
Реакции: volody00 и Mikhail B.

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 261
Благодарностей
679
Баллы
113
C#:
HtmlElementCollection el_col =  instance.ActiveTab.FindElementsByXPath(String.Format("//*[name()='svg']", "innerhtml"));

List<HtmlElement> list = new List<HtmlElement>();
if(el_col.Elements.Length > 0) {
    for(int i=0;i<100;i++)     list.Add(el_col.Elements.First()); // Сколько кликов надо
}

list.AsParallel().ForAll(x=> x.Click()); // асинхронно кликаем по всем элементам
Доброго времени суток, подскажите пожалуйста, я правильно понимаю что как при использовании thread так и асинхронных методов, будет получаться только псевдомногопоточность? Т.е задачи не выполняются одновременно, а процессор просто между ними очень быстро переключается?Ну вот как на картинке.
2022-07-04_07-32-29.png
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Доброго времени суток, подскажите пожалуйста, я правильно понимаю что как при использовании thread так и асинхронных методов, будет получаться только псевдомногопоточность? Т.е задачи не выполняются одновременно, а процессор просто между ними очень быстро переключается?Ну вот как на картинке.
Посмотреть вложение 93969
Процессор всегда так работает. Система выделяет некоторый квант времени на задачи и постоянно переключает процессор между тысячами задач во всей системе.
 
  • Спасибо
Реакции: Sherminator

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 261
Благодарностей
679
Баллы
113
Процессор всегда так работает. Система выделяет некоторый квант времени на задачи и постоянно переключает процессор между тысячами задач во всей системе.
Понял, спасибо. Просто предположил что у описанных выше способов может быть разница в способе выполнении задач в многопотоке, т.к переключение между группой задач происходит в рамках одного ядра, другое ядро точно так же скачет между другими задачами. И вот я подумал что при использовании асинхронности может быть такое что выделится более одного ядра и задачи будут выполняться одновременно. Хотя щас все это расписал и понимаю что это даже теоретически звучит тупо) т.к ядер не напасешься таким образом. Так что вопрос закрыт) еще раз спасибо)
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Понял, спасибо. Просто предположил что у описанных выше способов может быть разница в способе выполнении задач в многопотоке, т.к переключение между группой задач происходит в рамках одного ядра, другое ядро точно так же скачет между другими задачами. И вот я подумал что при использовании асинхронности может быть такое что выделится более одного ядра и задачи будут выполняться одновременно. Хотя щас все это расписал и понимаю что это даже теоретически звучит тупо) т.к ядер не напасешься таким образом. Так что вопрос закрыт) еще раз спасибо)
Еще, насколько я знаю, AsParallel не может запустить сразу все в работу. у нее есть какой то лимит. Вроде можно настроить, но там все равно есть ограничения. В данном случае это не влияет, а вот при больших данных, бывает что пачками запускает в работу.
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)