понял, что проще на питоне будет организовать такоечушь. проще на языке который знаешь. кроме того C# гораздо роднее винде. а в линуксе возможно питон выиграет. но это все только при условии что язык освоили, и задачу поняли
разные личности, а не вкладкитут пляшем от профиля. для разных личностей свои профили. тор основан на фаерфоксе, там командная строка будет такая
"C:\Program Files\Mozilla Firefox\firefox.exe" -no-remote -profile <путь к папке профиля (любой, где хотим там и размещаем)>
Язык программирования C# 7 и платформы .NET и .NET Coreдо части с ООП включительно, извините за тавтологию.
function Generate(s) {
if(s.length === 1) return [s];
const ans = [];
const last = s[s.length - 1];
s = s.slice(0, s.length - 1);
const prev = Generate(s);
for (const entry of prev) {
ans.push(entry + last);
ans.push(entry + '.' + last);
}
return ans;
}
const createKeyGenerator = (groupSize, groupCount) => {
const dictionary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
const length = groupSize * groupCount;
return () => {
const values = new Uint32Array(length);
crypto.getRandomValues(values);
const chars = [...values].map(value => dictionary[value % dictionary.length]);
const key = new Array(groupCount)
.fill(null)
.map((_, index) => {
const offset = index * groupSize;
return chars
.slice(offset, offset + groupSize)
.join('');
})
.join('-');
return key;
};
};
const createKey = createKeyGenerator(4, 3);
console.log(createKey()); // FO4V-P2ZV-JYH4
console.log(createKey()); // TTMR-EBVC-8TUW
const createKeyGenerator = (groupSize, groupCount) => {
const dictionary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
const length = groupSize * groupCount;
const group = new RegExp(`.{${groupSize}}`, 'g');
return () => {
const values = new Uint32Array(length);
crypto.getRandomValues(values);
const chars = [...values].map(value => dictionary[value % dictionary.length]);
const key = '_'
.repeat(length)
.replace(/\w/g, (match, index) => chars[index])
.match(group)
.join('-');
return key;
};
};
Set
коллекции, по итогу размер коллекции превысил (16^6
значений) и получил исключение. При этом не было ни одного повтора. import requests
from bs4 import BeautifulSoup
response = requests.get('https://mp3-fm.site/')
soup = BeautifulSoup(response.text,"html.parser")
playlist = soup.find('div',id='xx1').find_all('div',class_='song')
for song in playlist:
title = song.find('div',class_='title').text.strip()
url = song.find('button',class_='btn btn_play').get('data-norber')
response2 = requests.get(url)
print(f'Download: {title}')
with open(title+'.mp3','wb') as file:
file.write(response2.content)
import requests
from bs4 import BeautifulSoup
response1 = requests.get('https://oxy.fm/')
soup = BeautifulSoup(response1.text,"html.parser")
playlist = soup.find('ul',class_='playlist').find_all('li')
for song in playlist:
title = song.find('span',class_='playlist-name-title').text
artist = song.find('span',class_='playlist-name-artist').text
url = song.find('a',class_='playlist-play no-ajax').get('data-url')
response = requests.get(url)
with open(f'{artist}-{title}.mp3','wb') as file:
file.write(response.content)
print(f'Download {artist}-{title}')