• Как привязать домен к django?

    @vadimeasy
    Михаил, нужно делать редирект с nginx + gunicorn (я лично так делаю). Если юзать "голый" gunicorn статические файлы в проекте не будут работать
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    Денис Кузьмин, вчера копался во вкладке нетворк в браузере, суть в следующем, когда вебсокет получает ответ от сервера с заявкой, он также отправляет action.twig - файл с шаблоном для рендера плашки с кнопкой "ПРИНЯТЬ" и передает в нем идентификаторы заявки, как я понял, этот шаблон моментально рендерит плашку с данными, которые идут в запрос, который отправляется на сервер при нажатии на кнопку "ПРИНЯТЬ". Я реализовал такой скрипт, который при появлении нужного мне класса, сразу отправляет запрос с данными из ДИВа (в который передаются данные из action.twig), жду новых заявок чтобы понять, как поведёт себя скриптец)
    Если у вас есть идеи, как можно из этого action вытащить данные раньше, чем они отрисуются в DOM, буду благодарен)
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    Александр, Пробовал таким способом, но всё равно медленно. Вчера смотрел вкладку "Сеть" во время принятия уведомлений, увидел, что самое первое во время прихода новой заявки - это звук. Также мне показалось странным, но может быть я чего-то недопонимаю, запрос который отправляется от клиента к серверу всегда одинаковый, то есть я нажима на кнопку "ПРИНЯТЬ" и при любой заявке всегда идентичный запрос отправляется. Может быть я смогу отправлять этот запрос, сразу, как приходит звук.
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    Добрый вечер, попробовал ваш спосо, но не хватает знаний. Нашел сокет который отвечает за соединение с сервером, как ни странно он называется Notifier) Кинул тестовый запрос к серверу, ответ получаю. Сейчас жду заявку чтобы посмотреть json который приходит вместе с уведомлением, но вот не понимаю, даже если я увижу новый json, представим, что в нем будет такой ключ notifier: "new_request", как мне настроить обработчик так чтобы оне не бесконечно много запросов кидал на сервер, а ждал нужный и потом сразу жал кнопку/отправлял ответ. Можете подсказать, как это реализовать или где про это почитать, а то даже представления никакого не имею. 65a6c110e5a17973741274.jpeg

    Также прикладываю код сокета, может он даст какую-то подсказку, для меня он совершенно не инофрмативен:
    define(function() {
    	"use strict";
    	
    	function SocketClient(url, opts = {})
    	{
    		let $this = this;
    		this.ws = null;
    		this.connected = false;
    		this.url = url;
    		this._recon_intrv = null;
    		this._send_intrv = null;
    		
    		this.options = {
    			auto_reconnect: true,
    			reconnect_delay: 4004
    		};
    		this._on = {
    			open: [],
    			msg: [],
    			close: [],
    			connectError: [],
    			error: []
    		}
    		this._onCmd = {};
    		
    		$.each(opts, function(k, v) {
    			if ($this.options[k] != undefined) {
    				$this.options[k] = v;
    			}
    		});
    		this._requests = {};
    		this._queue = [];
    		this._busy = false;
    		this.ready();
    	};
    	
    	SocketClient.prototype.ready = function()
    	{
    		let $this = this;
    		if (this._send_intrv) {
    			clearInterval(this._send_intrv);
    		}
    		this._send_intrv = setInterval(function() {
    			if (!$this._busy && $this._queue.length > 0 && $this.hasConnected()) {
    				$this._sendWork();
    			}
    		}, 100);
    	};
    	
    	SocketClient.prototype._sendWork = function()
    	{
    		let $this = this,
    			remove_hanlded = [];
    		this._busy = true;
    		$this._queue.forEach(function(data, index) {
    			if ($this.hasConnected()) {
    				remove_hanlded.push(index)
    				$this.ws.send(data);
    			}
    		});
    		for (var i = remove_hanlded.length -1; i>=0; i--) {
    			$this._queue.splice(remove_hanlded[i], 1);
    		}
    		this._busy = false;
    	};
    	
    	SocketClient.prototype.hasConnected = function()
    	{
    		return this.connected && this.ws && this.ws.readyState === 1;
    	};
    	
    	SocketClient.prototype.connect = function()
    	{
    		let $this = this;
    		return new Promise((resolve, reject) => {
    			if (this.hasConnected()) {
    				return resolve($this);
    			}
    			this.ws = new WebSocket(this.url);
    			this.ws.onopen = function(event) {
    				$this.connected = true;
    				$.each($this._on.open, function(i, callback) {
    					callback(event);
    				});
    				resolve($this);
    			};
    			this.ws.onmessage = function(event) {
    				let data = event.data;
    				if (event.data.indexOf('{"') === 0) {
    					data = JSON.parse(event.data);
    					if (data.cmd && data.request_id && $this._onCmd[data.cmd]) {
    						$.each($this._onCmd[data.cmd], function(i, callback) {
    							callback(data.arg);
    						});
    					} else if (data.response_id) {
    						let request = $this._requests[data.response_id];
    						if (request) {
    							if (data.status === true) {
    								request.resolve(data);
    							} else {
    								request.reject(data);
    							}
    							delete $this._requests[data.response_id];
    						}
    					}
    				}
    				$.each($this._on.msg, function(i, callback) {
    					callback(data);
    				});
    			};
    			this.ws.onclose = function(event) {
    				$this.connected = false;
    				if (!event.wasClean || event.code == 1011) {
    					$.each($this._on.connectError, function(i, callback) {
    						callback(event);
    					});
    					if ($this.options.auto_reconnect) {
    						$this._reconnect();
    					}
    				} else {
    					$.each($this._on.close, function(i, callback) {
    						callback(event);
    					});
    				}
    			};
    			this.ws.onerror = function(event) {
    				if (!$this.connected) {
    					reject(event);
    				}
    				$this.connected = false;
    					$.each($this._on.error, function(i, callback) {
    						callback(event);
    					});
    			};
    		});
    	};
    	
    	SocketClient.prototype._reconnect = function()
    	{
    		let $this = this;
    		if (this._recon_intrv) {
    			clearTimeout(this._recon_intrv);
    		}
    		return new Promise((resolve, reject) => {
    			this._recon_intrv = setTimeout(function(Socket) {
    				$this.connect()
    				 .then(() => {
    				}).catch((e) => {
    					
    				});
    			}, this.options.reconnect_delay);
    		});
    	};
    	
    	SocketClient.prototype.send = function(data)
    	{
    		this._queue.push(data);
    		return this;
    	};
    	
    	SocketClient.prototype.cmd = function(cmd, arg = null)
    	{
    		let data = {
    			cmd: cmd, 
    			arg: arg, 
    			request_id: Math.floor(Date.now()*Math.random())
    		};
    		return new Promise((resolve, reject) => {
    			try {
    				this.send(JSON.stringify(data).replace(/&/g,'%26'));
    				data.resolve = resolve;
    				data.reject = reject;
    				this._requests[data.request_id] = data;
    			} catch(e) {
    				reject(e);
    			}
    		});
    	};
    	
    	SocketClient.prototype.on = function(ev, callback)
    	{
    		if (this._on[ev]) {
    			this._on[ev].push(callback);
    		}
    		return this;
    	};
    	
    	SocketClient.prototype.onCmd = function(cmd, callback)
    	{
    		if (this._onCmd[cmd] == undefined) {
    			this._onCmd[cmd] = [];
    		}
    		this._onCmd[cmd].push(callback);
    		return this;
    	};
    	
    	SocketClient.prototype.close = function()
    	{
    		return this.ws.close();
    	};
    	
    	return SocketClient;
    });

    Спасибо.
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    maksam07, Этого я не знаю, моя задача реализовать крипт максимально быстрым способом, с запросами я ещё не пробовал, сегодня буду пробовать такой способ. Может быть поможет.
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    maksam07, Код в вопросе приложен, но это уже обновленный, а тот цикл, что ты предалагешь, не отличается от тех, что ребята ниже скинули в ответы.
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    Мой скрипт, точно работает, потому что пока она оффлайн, я забираю все заявки.
    Спасибо, попробую поискать событие.
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    Такая кнопка одна, сегодня утром делал ровно также, как вы предлагаете, всё равно у колллеги быстрее работает :(
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    Пробовал так, браузер виснет через несколько минут :(
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    Dmitry Bay, Доступа к программистам нет, в распоряжении только браузер и аккаунт менеджера)
    Написано
  • Как максимально быстро кликнуть на элемент в браузере?

    @vadimeasy Автор вопроса
    shurshur, Жаловались начальству, сказал - я проверил, там всё нормально, а то что у коллеги по 100 лидов в месяц, когда у остальных 30, это подозрений не вызывает)) Она просто теперь работает меньше, так как пока она "онлайн" все лиды - её.
    Написано
  • Как сравнить две базы данных?

    @vadimeasy Автор вопроса
    Adamos, Сравнение будет происходить два раза, в момент первого теста и приёмочного теста, поменяться может мало чего, важно чтобы таблицы полностью совпадали, по этому после первого теста могут быть внесены изменения в поток обновления, а значит и на приёмочном тестировании в таблицен могут быть вновь допущены ошибки, соотстветственно делаю вывод, что нужно будет проверять всё полностью с первой и до последней строки
  • Как сравнить две базы данных?

    @vadimeasy Автор вопроса
    mayton2019,
    Поэтому тут надо уточнить само задание. Чем мы заняты?
    Это не одноразовая история, таким запросом будет пользоваться отдел из 6 человек практически каждый день.

    Спасибо за остальную информацию, ознакомлюсь и если найду ответ, отпишу сюда)
  • Как последовательно брать данные из таблицы и проверять их на python?

    @vadimeasy Автор вопроса
    Прошу прощения, что плохо сформулировал. Мне больше нужно не считывание, а последовательное всчитываение данных и применение к скрипту, может знаете что-то об этом?
  • Телеграм бот, ответ пользователю если его сообщение содержит слово?

    @vadimeasy
    vadimeasy, Пишу сообщение боту, "У меня не пришла накладная" получаю 3 сообщения.
  • Телеграм бот, ответ пользователю если его сообщение содержит слово?

    @vadimeasy
    Использовал, вашу подсказу, но у меня немного другое условие, мне надо отправлять, если сообщение содержит несколько слов. По вашему методу, он отправляет 3 сообщения, так как я ищу в сообщении 3 слова, как можно сделать, так чтобы бот отправлял только одно сообщение, даже если сообщение содержит 1, 2 или 3 искомых слова? Вот код:
    @bot.message_handler(content_types=['text'])
    def message_test(message):
        words = ['накладная', 'не', 'пришла']
        for word in words:
            if word in message.text:
                bot.send_message(message.chat.id, 'Вот И Н С Т Р У К Ц И Я, почитай!')
            else:
                bot.send_message(message.chat.id, 'Зову людей, пару минут.')
  • Как можно управлять службами и брандмауэром в Windows 7 на Python?

    @vadimeasy Автор вопроса
    Скопировал по ссылке одно из решений, а конкретно вот это
    import subprocess, ctypes, os, sys
    from subprocess import Popen, DEVNULL
    
    def check_admin():
        """ Force to start application with admin rights """
        try:
            isAdmin = ctypes.windll.shell32.IsUserAnAdmin()
        except AttributeError:
            isAdmin = False
        if not isAdmin:
            ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    
    def add_rule(rule_name, file_path):
        """ Add rule to Windows Firewall """
        subprocess.call(
            f"netsh advfirewall firewall add rule name={rule_name} dir=out action=block enable=no program={file_path}", 
            shell=True, 
            stdout=DEVNULL, 
            stderr=DEVNULL
        )
        print(f"Rule {rule_name} for {file_path} added")
    
    def modify_rule(rule_name, state):
        """ Enable/Disable specific rule, 0 = Disable / 1 = Enable """
        state, message = ("yes", "Enabled") if state else ("no", "Disabled")
        subprocess.call(
            f"netsh advfirewall firewall set rule name={rule_name} new enable={state}", 
            shell=True, 
            stdout=DEVNULL, 
            stderr=DEVNULL
        )
        print(f"Rule {rule_name} {message}")
    
    if __name__ == '__main__':
        check_admin()
        add_rule("RULE_NAME", "PATH_TO_FILE")
        modify_rule("RULE_NAME", 1)

    Чтобы понять, как оно работает и переделать под себя. Но выдаешь ошибку, что отсутствуют 2 аргумента
    Traceback (most recent call last):
      File "c:\Users\kolom\Desktop\Main\Auto_EGAIS\win7_firewall.py", line 39, in <module>
        add_rule()
    TypeError: add_rule() missing 2 required positional arguments: 'rule_name' and 'file_path'

    Это происходит при вызове функции, подскажите, что я делаю не так?
  • Как сделать ограниченные права на операции по SSH с помощью iptables?

    @vadimeasy Автор вопроса
    Сергей Горностаев, Потому что интерфейс будет на винде, а управляться через повершелл