username ALL = NOPASSWD: /usr/bin/tee
volumes:
- ./user.txt:/etc/sudoers.d/username
Пользователи, которые часто выходят из приложения Telegram и снова авторизуются, теперь смогут получать авторизационные коды не в СМС, а на электронную почту — или использовать функцию «Войти с помощью Apple» или «Войти с помощью Google».
<?php
$folder = "Название папки на кириллице";
$encodedFolder = mb_convert_encoding($folder, "UTF7-IMAP", "UTF-8");
$imapStream = imap_open("{imap.example.com}" . $encodedFolder, $login, $password);
if ($imapStream === false) {
echo "Ошибка: " . imap_last_error();
exit;
}
$encodedFolder = imap_utf7_encode($folder);
const deleteButton = document.querySelectorAll('.column__card-button');
const addButton = document.querySelector('.add_card')
const cardContent = document.querySelector('.column__card-content_add')
const columns = document.querySelectorAll('.column')
const columnTitle = document.querySelector('.column_title')
const mainContainer = document.querySelector('.main_container')
const toDoContainer = document.querySelector('.todo_container')
let actualCard = null;
const tasks = document.querySelectorAll('.column__card')
const areatxt = document.getElementById('textareaid')
addButton.addEventListener('click', function() {
let columnCardText = areatxt.value;
areatxt.value = ''
const newColumnCard = `<div class="column__card" draggable="true"><div
class="column__card-content">${columnCardText}</div><button class="column__card-button"></button></div>`
columnTitle.insertAdjacentHTML("afterEnd", newColumnCard);
//updateLocalStorage()
});
mainContainer.addEventListener('click', function(event) {
if (event.target.classList.contains('column__card-button')) {
const card = event.target.closest('.column__card');
if (card) {
card.remove();
}
}
//updateLocalStorage()
});
function dragStart(e) {
actualCard = e.target
e.target.classList.add("is-dragging");
};
function dragEnd(e) {
this.classList.remove('hovered');
};
function dragEnter(e) {
e.preventDefault();
this.classList.add('hovered');
};
function dragLeave() {
this.classList.remove('hovered');
};
function dragOver(e) {
e.preventDefault();
const activeElement = mainContainer.querySelector(`.is-dragging`);
const currentElement = e.target;
const isMoveable = activeElement !== currentElement && currentElement.classList.contains(`column__card`);
if (!isMoveable) {
if (e.target.classList.contains("column") && !this.contains(actualCard)) {
this.appendChild(actualCard);
}
return;
}
// e.clientY — вертикальная координата курсора в момент,
// когда сработало событие
const nextElement = getNextElement(e.clientY, currentElement);
// Проверяем, нужно ли менять элементы местами
if (
nextElement &&
activeElement === nextElement.previousElementSibling ||
activeElement === nextElement
) {
return;
}
this.insertBefore(activeElement, nextElement);
};
const getNextElement = (cursorPosition, currentElement) => {
// Получаем объект с размерами и координатами
const currentElementCoord = currentElement.getBoundingClientRect();
// Находим вертикальную координату центра текущего элемента
const currentElementCenter = currentElementCoord.y + currentElementCoord.height / 2;
// Если курсор выше центра элемента, возвращаем текущий элемент
// В ином случае — следующий DOM-элемент
const nextElement = (cursorPosition < currentElementCenter) ?
currentElement :
currentElement.nextElementSibling;
return nextElement;
};
for (const column of columns) {
column.addEventListener('dragenter', dragEnter);
column.addEventListener('dragleave', dragLeave);
column.addEventListener('dragover', dragOver);
column.addEventListener('drop', drop);
column.addEventListener('dragstart', dragStart);
column.addEventListener('dragend', dragEnd);
}
function drop(e) {
e.preventDefault();
actualCard.classList.remove("is-dragging");
actualCard = null;
this.classList.remove('hovered');
//updateLocalStorage();
};
import time
from fake_useragent import UserAgent
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
option = webdriver.ChromeOptions()
ua = UserAgent()
option.add_argument(f'user-agent={ua.random}')
option.add_argument("--disable-infobars")
s = Service(executable_path=r"C:\Python Scripts\валид\Steam Number\chromedriver.exe")
driver = webdriver.Chrome(options=option, service=s)
driver.maximize_window()
driver.get('https://help.steampowered.com/en/wizard/HelpWithLoginInfo?issueid=406')
# iframe
iframe = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div[7]/div[2]/div[2]/div/div[2]/div[1]/div[3]/form/div[3]/div[1]/div/div/div/iframe'))
)
# switch to iframe context
driver.switch_to.frame(iframe)
element_to_click = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '/html/body/div[2]/div[3]'))
)
element_to_click.click()
# switch to default context
driver.switch_to.default_content()
time.sleep(10)
driver.quit()
<label><input type="radio"><span>1</span></label>
label > input {
position: absolute;
width: 0;
height: 0;
overflow: hidden;
}
label > span {
display: flex;
align-items: center;
}
label > span::before {
content: '';
width: 2em;
height: 2em;
border-radius: 50%;
border: 2px solid #888;
background: content-box #FFF0;
padding: 2px;
}
label > input:checked + span {
background-color: #00F;
border-color: #00F;
}
"emmet.syntaxProfiles": {
"html": {
"self_closing_tag" : true
}
}
Посоветуйте ресурсы
мне бы хотелось максимально узнать как водить курсором с помощью этой бибилиотеки как человек
volumes:
- ./initDatabase1:/docker-entrypoint-initdb.d
volumes:
- ./initDatabase2:/docker-entrypoint-initdb.d
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Audio Context Example</title>
</head>
<body>
<input type="file" id="fileInput" accept=".mp3">
<audio id="audioElement" controls></audio>
<script>
const fileInput = document.getElementById('fileInput');
const audioElement = document.getElementById('audioElement');
const audioContext = new AudioContext();
fileInput.addEventListener('change', () => {
const file = fileInput.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function (e) {
audioElement.src = e.target.result;
const source = audioContext.createMediaElementSource(audioElement);
source.connect(audioContext.destination);
audioElement.play();
};
reader.readAsDataURL(file);
}
});
</script>
</body>
</html>