Pada titik tertentu dalam hidup saya, saya menyadari bahwa untuk kebahagiaan saya perlu membuat 10 halaman salinan diri saya di Vkontakte dan pada saat yang sama ditambahkan sebagai teman kepada orang-orang dari daftar teman halaman utama saya. Untuk detail penerapan ide - harap, di bawah kucing.

Tujuan proyek
- Buat 10 halaman di Vkontakte
- Salin avatar dari halaman utama
- Salin semua posting dari halaman utama
- Salin semua video dari halaman utama
- Tambahkan ke semua grup halaman utama
- Buat grafik lengkap sepeda teman di antara bot (seperti setiap entri dan tambahkan setiap bot sebagai teman)
- Tambahkan ke masing-masing 80 orang dari daftar teman yang telah dikompilasi sebelumnya
Pendaftaran
Untuk membuat halaman, saya menggunakan layanan sms-reg.com, lebih lanjut tentang layanan penerimaan SMS ditulis dengan baik di
sini .
Kami mendaftarkan semua 10 halaman dan menulis nama pengguna / kata sandi mereka di file accounts.json (di mana id adalah id dari halaman yang didaftarkan, dan zero_id adalah id dari halaman utama kami):
{ "zero_id": "21102****", "accounts": [ { "phone": "7985002****", "password": "tTod********", "id": 53980**** }, { "phone": "7985317****", "password": "tglh********", "id": 53980**** }, ... { "phone": "7916033****", "password": "ZsRq********", "id": 54038**** } ] }
python + vk_api
Saya akan bekerja dengan perpustakaan vk_api.
pip install vk_api --user
Buat file bots.py, itu akan berguna bagi kami untuk sisa skrip:
import json import vk import vk_api from captcha import captcha_handler with open('accounts.json', 'r') as file: data = json.loads(file.read()) accounts = data['accounts'] zero_id = int(data['zero_id']) vk_apis = [] def init_apis(): current_id = 0 for account in accounts: vk_session = vk_api.VkApi(account['phone'], account['password'], captcha_handler=captcha_handler) vk_session.auth() vk_apis.append(vk_session.get_api()) print('account', current_id, 'successfully inited') current_id += 1 init_apis()
Bunyinya accounts.json dan menginisialisasi api untuk masing-masing akun.
Salin avatar
def change_photo(vk): upload_url = vk.photos.getOwnerPhotoUploadServer()['upload_url'] answer = json.loads(requests.post(upload_url, files={'photo': open('avatar.jpg', 'rb')}).text) vk.photos.saveOwnerPhoto(photo=answer['photo'], server=answer['server'], hash=answer['hash']) counter = 0 for vk in vk_apis: change_photo(vk) print(counter, 'done') counter += 1
Menyalin video
videos = default_vk.video.get(owner_id=zero_id, count=100) counter = 0 for vk in vk_apis: for video in videos['items']: vk.video.add(video_id=video['id'], owner_id=video['owner_id'])
Menambahkan ke Grup
from time import sleep from bots import vk_apis, zero_id, accounts, default_vk groups = default_vk.groups.get(user_id=zero_id, count=100) counter = 0 for vk in vk_apis: for group in groups['items']: print('add to', group) vk.groups.join(group_id=group) print(counter) counter += 1
Buat grafik teman yang lengkap

counter = 0 for vk, account in zip(vk_apis, accounts): for friend in accounts: if friend['id'] == account['id']: continue vk.friends.add(user_id=friend['id'], captcha_handler=captcha_handler) print(counter, friend['id'], account['id']) counter += 1 sleep(1)
Buat grafik suka lengkap
counter = 0 for vk, account in zip(vk_apis, accounts): for friend in accounts: if friend['id'] != account['id']: continue print(counter, friend['id'], account['id']) for post in vk.wall.get(owner_id=friend['id'])['items']: flag = True while flag: try:
Tambahkan ke teman
buat file teman di mana kami menulis di setiap baris
id_ #_ ( )
VKontakte memungkinkan Anda untuk menambah sekitar 80 orang sehari.
friends_str = '' with open('friends', 'r') as file: friends_str = file.read() friends = [{'id': x.split(' #')[0], 'name': x.split(' #')[1]} for x in friends_str.split('\n')] ids_ = ([x['id'] for x in (default_vk.users.get(user_ids=[x['id'] for x in friends]))]) for friend, id_ in zip(friends, ids_): print(friend['name']) print(friend) for vk in vk_apis: flag = True while flag: try: vk.friends.add(user_id=int(id_)) flag = False except: print('error') sleep(10)
Bypass CAPTCHA
Pembaca yang penuh perhatian telah melihat garis
from captcha import captcha_handler
Karena Vkontakte tidak selalu menyukai jumlah permintaan ini, Anda harus memproses captcha. Ada sejumlah besar layanan yang memberikan peluang seperti itu. Anda hanya perlu mengirim permintaan pos dengan captcha di base64 dan tunggu.

def uncapcha(url): imager = requests.get(url) r = requests.post('http://rucaptcha.com/in.php', data = {'method': 'base64', 'key': RUCAPTCHA_KEY, 'body': base64.b64encode(imager.content)}) if (r.text[:3] != 'OK|'): print('captcha failed') return -1 capid = r.text[3:] sleep(5) capanswer = requests.post('http://rucaptcha.com/res.php', data = {'key': RUCAPTCHA_KEY, 'id':capid, 'action':'get'}).text if (capanswer[:3] != 'OK|'): print('captcha failed') return -1 return capanswer[3:]
Hasil
Berikut adalah beberapa tangkapan layar dari apa yang dikirim orang kepada saya
githubPertanyaan utama tetap terbuka - mengapa saya melakukan ini? Saya tidak tahu.