<input type="text" id="textarea">
// Код воркера в виде строки
const workerCode = `
self.onmessage = (event) => {
const largeArray = event.data;
// Выполнение тяжелой обработки массива
for (let i = 0; i < largeArray.length; i++) {
// Например: largeArray[i] = someProcessing(largeArray[i]);
largeArray[i] *= 2; // Пример обработки: удваиваем каждый элемент
}
// Отправка обработанных данных обратно в главный поток
self.postMessage(largeArray);
};
`;
// Создание Blob из строки с кодом воркера
const blob = new Blob([workerCode], { type: 'application/javascript' });
// Создание объекта Worker из URL на Blob
const worker = new Worker(URL.createObjectURL(blob));
// Обработка сообщений от воркера
worker.onmessage = (event) => {
const processedArray = event.data;
console.log('Обработанный массив:', processedArray);
// Можно обновить интерфейс или использовать данные
};
// Пример массива для обработки
const largeArray = new Array(1e6).fill(15);
function debounce(func, delay) {
let timeout;
return function(...args) {
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), delay);
};
}
const handleInput = debounce(() => {
worker.postMessage(largeArray);
}, 300); // Вызываем через 300 мс после окончания ввода
// Пример добавления обработчика для textarea
textarea.addEventListener('input', (event) => {
console.log(event.target.value);
handleInput();
});
SELECT * FROM products WHERE productid={нефильтрованный ID};
1; SELECT pg_sleep(25)
SELECT * FROM products WHERE productid=1; SELECT pg_sleep(25);
+$(".form-submit").on("click", ".product__add", function () {
-$(".product__add").on("click", function () {
pattern
срабатывает непосредственно перед отправкой формы. Кроме того, это не запретит ввод символов, отличных от цифр, а лишь покажет уведомление в случае несоответствия. Вашу же задачу можно решить несколькими способами.<input type="number" />
. Из особенностей: он допускает ввод некоторых символов, отличающихся от цифр (например, "+" и "e").onChange
у поля ввода:const [value, setValue] = useState('')
const handleInputChange = (e) => {
setValue(e.target.value.replace(/\D/g, ''))
}
<input value={value} onChange={handleInputChange} />
<?php
$url = 'http://192.168.1.8/cgi-bin/mjpg/video.cgi?channel=1&subtype=1';
// Функция для digest-авторизации
function digest_parse($txt)
{
$needed_parts = array('nonce'=>1, 'realm'=>1, 'qop'=>1);
$data = array();
$keys = implode('|', array_keys($needed_parts));
preg_match_all('@('.$keys.')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
unset($needed_parts[$m[1]]);
}
return $needed_parts ? false : $data;
}
// Инициализация cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// получения заголовков www-Authenticate
$response = curl_exec($ch);
// разбор заголовк а WWW-Authenticate
if (preg_match('/^WWW-Authenticate: Digest (.*)$/im', $response, $matches)) {
$digest_parts = digest_parse($matches[1]);
// Создание заголовка Authorization
// Здесь также надо сгенерить правильный ответ на основе полученных данных и вашего логина и пароля
// наподобие этого
$digest_response = ''; // ответ
// Установка опций для cURL с заголовком Authorization
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Digest username="adminka", realm="'.$digest_parts['realm'].'", nonce="'.$digest_parts['nonce'].'", uri="/cgi-bin/mjpg/video.cgi?channel=1&subtype=1", response="'.$digest_response.'", qop='.$digest_parts['qop'].', nc=00000001, cnonce="d41d8cd98f00b204e9800998ecf8427e"'));
}
// Удаление предыдущих заголовков
curl_setopt($ch, CURLOPT_HEADER, 0);
// Передача потока клиенту
curl_exec($ch);
curl_close($ch);
?>
<img src="вашскрипт.php" width="720" height="480">
в Pyrogram документации не нашел подобного
import asyncio
from pyrogram import Client
from pyrogram.errors import PyrogramError
class ProxyManager:
def __init__(self, app, max_retries=5, retry_delay=1, proxy=None):
self.app = app
self.max_retries = max_retries
self.retry_delay = retry_delay
self.proxy = proxy
self.client = None
async def connect(self):
for attempt in range(1, self.max_retries + 1):
try:
print(f"Connection attempt #{attempt}")
self.client = Client(**self.app, proxy=self.proxy)
await self.client.start()
print("The connection was established successfully.")
except PyrogramError as e:
print(f"Connection error: {e}")
if attempt == self.max_retries:
print("The maximum number of connection attempts has been reached, stop!")
break
await asyncio.sleep(self.retry_delay)
async def disconnect(self):
if self.client:
await self.client.stop()
print("Connection is closed.")
app = {
'api_id': 'YOUR_API_ID',
'api_hash': 'YOUR_API_HASH',
'session_name': 'your_session_name'
}
proxy = {
'scheme': 'http', # or 'socks5'
'hostname': 'your.proxy.hostname',
'port': 1080,
'username': 'user',
'password': 'password'
}
# test run
async def main():
manager = ProxyManager(app, max_retries=3, retry_delay=2, proxy=proxy)
await manager.connect()
await manager.disconnect()
asyncio.run(main())
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium_stealth import stealth
proxy = '45.132.75.19:23820'
options = Options()
options.add_argument('--proxy-server=socks5://' + proxy)
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("window-size=1920,1080")
# options.add_argument("--incognito")
options.add_argument("--disable-extensions")
options.add_argument("--disable-plugins-discovery")
options.add_argument("--start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
executable_path = './chromedriver-121.0.6167.85.exe'
service = Service(executable_path=executable_path)
driver = webdriver.Chrome(service=service, options=options)
stealth(driver,
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win64",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
run_on_insecure_origins=True,
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.85 Safari/537.36',
)
try:
driver.get('https://allegro.pl/kategoria/laptopy-491')
time.sleep(30)
print(driver.page_source)
finally:
driver.quit()
import myJson from './example.json'
//Some code.....
myJson.forEach(element => console.log(element.id));
import pandas as pd
import numpy as np
data = [
{'symbol': 'FTTBUSD', 'positionAmt': '0.001', 'entryPrice': '0.0', 'markPrice': '0.00000000'},
{'symbol': 'ETHUSDT', 'positionAmt': '0.003', 'entryPrice': '1912.07', 'markPrice': '1911.37031373'},
{'symbol': 'ALPHAUSDT', 'positionAmt': '0.002', 'entryPrice': '0.0', 'markPrice': '0.00000000'}
]
df = pd.DataFrame(data=data, columns=['symbol','positionAmt'])
df['positionAmt'] = df['positionAmt'].astype(float)
print(df)
df.plot(kind='bar', x='symbol', y='positionAmt');
Выведет вот такой график<audio id="audio1" src="music.mp3"></audio>
<audio id="audio2" src="music2.mp3"></audio>
const audioElements = Array.from(document.getElementsByTagName('audio'));
const stopOtherAudio = (currentAudio) => {
audioElements.forEach((audio) => {
if (audio !== currentAudio) {
audio.pause();
audio.currentTime = 0;
}
});
};
audioElements.forEach((audio) => {
audio.addEventListener('play', () => stopOtherAudio(audio));
});
weather = mgr.weather_at_place('London,GB')
print(weather.weather.weather_code)
U+1F32B
weather_emojis = {721: '\U0001F32B', 500: '\U00001111'} # и тд
emo = weather_emojis[w.weather_code]