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]
https://img.youtube.com/vi/VIDEO_ID/hqdefault.jpg
, где VIDEO_ID
- id видео, from urllib import parse
url = 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
video_id = parse.parse_qs(parse.urlparse(url).query)['v'][0]
thumbnail_url = f'https://img.youtube.com/vi/{video_id}/hqdefault.jpg'
=СУММ(B2:ИНДЕКС(B:B;СЧЕТЗ(B:B);1))