На C# Напиши два метода SmoothMove(для случайных криволинейных траектория движения мыши) и SmoothMoveList(прямое движения мыши с замедлением в конце) Используй InputSend. Добавь возможность регулирования скорости для каждого из методов, также каждому методу добавь переменные Point откуда куда.
Это необходимо для следующих методов
        public void ProcessList()
        {
            const int startX = 1295;
            int[] startYpoints = { 365, 435, 505, 565 };
            int currentPositionIndex = 0; // Индекс текущей позиции для startYpoints
            Point clickPoint = new Point(startX, startYpoints[currentPositionIndex]);
            bool endOfList = false;

            // Характеристики доверительного интервала
            Color endListColor = Color.FromArgb(255, 61, 60, 64);
            int tolerance = 12; // Допуск по цветовым компонентам

            
            while (true)
            {
                int steps = 15;
                // Плавное перемещение до точки нажатия
                SmoothMove(Cursor.Position, clickPoint, steps);
                Click();
                Thread.Sleep(400); // Задержка перед вызовом CheckPrice

                var price = CheckPrice();
                if (price.HasValue)
                {
                    ChangePrice(price);
                }
                else
                {
                    Thread.Sleep(120);
                }

                // Нужно ли скроллить вниз или мы в конце списка
                if (!endOfList)
                {
                    // Прокрутка списка
                    Point start = new Point(1200, 480);
                    Point end = new Point(1200, 421);
                    
                    SmoothMoveList(start, end, 10);
                    

                    // Взятие скриншота для проверки, находимся ли в конце списка
                    using (Bitmap bmpScreenshot = new Bitmap(1, 1, PixelFormat.Format32bppArgb))
                    {
                        using (Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot))
                        {
                            gfxScreenshot.CopyFromScreen(1445, 592, 0, 0, new Size(1, 1), CopyPixelOperation.SourceCopy);
                            Color pixelColor = bmpScreenshot.GetPixel(0, 0);
                            endOfList = IsColorSimilar(endListColor, pixelColor, tolerance);
                        }
                    }
                }
                else
                {
                    // Если достигнут конец списка, проверяем следующую позицию
                    currentPositionIndex++;
                    if (currentPositionIndex >= startYpoints.Length)
                    {
                        break; // Выходим из цикла когда все позиции проверены
                    }
                }

                // Установка следующей точки нажатия
                clickPoint.Y = startYpoints[currentPositionIndex];
            }
        }

        public void ChangePrice(long? number = null)
        {
            // Проверяем, что переданное число не равно null
            if (!number.HasValue)
                return; // Если значение не задано, прерываем выполнение метода

            List<Point> pointsToMove = new List<Point>
              {
                new Point(560, 655), // клик на цену
                //new Point(865, 785), // кнопка публиковать
                new Point(935, 255), // клик закрыть
            };

            for (int i = 0; i < pointsToMove.Count; i++)
            {
                int steps = 5;
                Point endPoint = pointsToMove[i];
                SmoothMove(Cursor.Position, endPoint, steps); // Используйте текущую позицию курсора как начальную точку

                // Если это первая точка, произведите клик и введите число
                if (i == 0)
                {
                    Click(); // Симулируем клик ЛКМ
                    Thread.Sleep(100);
                    // Здесь мы допускаем ввод значения number, а не price
                    SendKeys.SendWait(number.Value.ToString()); // Добавляем нажатие ENTER для подтверждения ввода
                }
                // Если это вторая точка, производим клик на кнопке "Публиковать"
                else if (i == 1)
                {
                    Click();
                    Thread.Sleep(300); // Имитация задержки после клика
                }
            }
        }