Advertisement
Guest User

Untitled

a guest
Jan 31st, 2017
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.34 KB | None | 0 0
  1. import requests, threading, pickle, random, sys, glob, os
  2. from utils import *
  3. from pprint import pprint
  4. from bs4 import BeautifulSoup
  5.  
  6. accounts_created = 0
  7. accounts_joined = 0
  8. accounts_favorited = 0
  9. accounts_followed = 0
  10. used_proxies = []
  11.  
  12.  
  13. PATH = "./cookies/" # SERVER
  14. PATH = ".\\cookies\\" # COMPUTER
  15.  
  16. class myThread(threading.Thread):
  17. global used_proxies
  18. global accounts_joined
  19. global accounts_favorited
  20. global accounts_followed
  21.  
  22. def __init__(self, username=None, proxies=None, group=None, favorite=None, follow=None):
  23. threading.Thread.__init__(self)
  24. self.username = username or get_random_name()
  25. self.password = self.username[::-1]
  26. self.email = "{0}@30wave.com".format(self.username)
  27. self.s = requests.Session()
  28. self.cookies = None
  29. self.proxies = proxies or self.scrape()
  30. self.proxy = None
  31. self.group = group
  32. self.should_create = not username
  33. self.favorite = favorite
  34. self.follow = follow
  35. self.successfully_created = True
  36.  
  37. def run(self):
  38. if self.should_create:
  39. self.create()
  40. if self.successfully_created:
  41. print("{0.username} {0.favorite}".format(self))
  42. if self.group and self.successfully_created:
  43. self.cookies = self.get_cookies()
  44. self.join_group()
  45. if self.favorite and self.successfully_created:
  46. self.cookies = self.get_cookies()
  47. self.favorite_item()
  48. if self.follow and self.successfully_created:
  49. self.cookies = self.get_cookies()
  50. self.follow_user()
  51. # self.scrape()
  52.  
  53. def follow_user(self, amount = 1):
  54. def retry():
  55. self.new_proxy()
  56. if amount < 5:
  57. try:
  58. self.follow_user(amount = amount + 1)
  59. except Exception as e2:
  60. print("{0.username} -> ERROR2 -> {1}".format(self, str(e2)))
  61. else:
  62. pass
  63. print("{0.username} following user attempt #{1}".format(self, amount))
  64. headers = """
  65. Connection: keep-alive
  66. Upgrade-Insecure-Requests: 1
  67. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
  68. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  69. Accept-Encoding: gzip, deflate, sdch, br
  70. Accept-Language: en-US,en;q=0.8
  71. """
  72. try:
  73. r = self.s.get(url = self.follow,
  74. headers = string_to_dict(headers),
  75. timeout = 10,
  76. cookies = self.cookies,
  77. # proxies = self.proxy,
  78. verify = False)
  79. csrf = r.text.split("setToken('")[1].split("'")[0]
  80.  
  81. headers = """
  82. Host: www.roblox.com
  83. Connection: keep-alive
  84. Content-Length: {}
  85. Pragma: no-cache
  86. Cache-Control: no-cache
  87. Accept: */*
  88. Origin: https://www.roblox.com
  89. X-CSRF-TOKEN: {}
  90. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
  91. Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  92. Referer: {}
  93. Accept-Encoding: gzip, deflate, br
  94. Accept-Language: en-US,en;q=0.8
  95. """
  96. data = "targetUserId={}".format(self.follow.split("/")[-2])
  97. headers = headers.format(len(data), csrf, self.follow)
  98. r = self.s.post(url = "https://www.roblox.com/user/follow",
  99. data = data,
  100. headers = string_to_dict(headers),
  101. cookies = self.cookies,
  102. # proxies = self.proxy,
  103. verify = False)
  104. if r.status_code == 200 and "{\"success\":true}" in r.text:
  105. print("{0.username} successfully followed user {0.follow}".format(self))
  106. with open("history.txt", "a") as f:
  107. f.write("{0.username}:{0.follow}\n".format(self))
  108. global accounts_followed
  109. accounts_followed += 1
  110. return True
  111. except Exception as e:
  112. exc_type, exc_obj, exc_tb = sys.exc_info()
  113. fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
  114. print(exc_type, fname, exc_tb.tb_lineno)
  115. retry()
  116. return
  117.  
  118. if r.text == "{\"success\":false,\"message\":\"Whoa. Slow down.\"}":
  119. print("{0.username} going too fast, waiting 1 minute.".format(self))
  120. sleep(60)
  121. retry()
  122. return False
  123. print("{0.username} could not follow user {0.follow}. Reason: {1}".format(self, r.text))
  124. return False
  125.  
  126. def favorite_item(self, amount = 1):
  127. def retry():
  128. self.new_proxy()
  129. if amount < 5:
  130. try:
  131. self.favorite_item(amount = amount + 1)
  132. except Exception as e2:
  133. print("{0.username} -> ERROR2 -> {1}".format(self, str(e2)))
  134. else:
  135. pass
  136. print("{0.username} favoriting item attempt #{1}".format(self, amount))
  137. headers = """
  138. Connection: keep-alive
  139. Upgrade-Insecure-Requests: 1
  140. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
  141. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  142. Accept-Encoding: gzip, deflate, sdch, br
  143. Accept-Language: en-US,en;q=0.8
  144. """
  145. try:
  146. r = self.s.get(url = self.favorite,
  147. headers = string_to_dict(headers),
  148. timeout = 10,
  149. cookies = self.cookies,
  150. # proxies = self.proxy,
  151. verify = False)
  152. csrf = r.text.split("setToken('")[1].split("'")[0]
  153.  
  154. headers = """
  155. Host: www.roblox.com
  156. Connection: keep-alive
  157. Content-Length: {}
  158. Pragma: no-cache
  159. Cache-Control: no-cache
  160. Accept: */*
  161. Origin: https://www.roblox.com
  162. X-CSRF-TOKEN: {}
  163. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
  164. Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  165. Referer: {}
  166. Accept-Encoding: gzip, deflate, br
  167. Accept-Language: en-US,en;q=0.8
  168. """
  169. data = "assetID={}".format(self.favorite.split("/")[-2])
  170. headers = headers.format(len(data), csrf, self.favorite)
  171. r = self.s.post(url = "https://www.roblox.com/favorite/toggle",
  172. data = data,
  173. headers = string_to_dict(headers),
  174. cookies = self.cookies,
  175. # proxies = self.proxy,
  176. verify = False)
  177. if r.status_code == 200 and "{\"success\":true}" in r.text:
  178. print("{0.username} successfully liked item {0.favorite}".format(self))
  179. with open("history.txt", "a") as f:
  180. f.write("{0.username}:{0.favorite}\n".format(self))
  181. global accounts_favorited
  182. accounts_favorited += 1
  183. return True
  184. except Exception as e:
  185. exc_type, exc_obj, exc_tb = sys.exc_info()
  186. fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
  187. print(exc_type, fname, exc_tb.tb_lineno)
  188. retry()
  189. return
  190.  
  191. if r.text == "{\"success\":false,\"message\":\"Whoa. Slow down.\"}":
  192. print("{0.username} going too fast, waiting 1 minute.".format(self))
  193. sleep(60)
  194. retry()
  195. return False
  196. print("{0.username} could not like {0.favorite}. Reason: {1}".format(self, r.text))
  197. return False
  198.  
  199. def get_cookies(self):
  200. # print("Logging in as {0.username}".format(self))
  201. # self.s.cookies.clear()
  202. # self.s.cookies.update(pickle.load(open("cookies\\{0.username}.p".format(self), "rb")))
  203.  
  204. # return pickle.load(open("./cookies/{0.username}.p".format(self), "rb")) # server
  205. x = None
  206. with open(PATH + "{0.username}.p".format(self), "rb") as f:
  207. return pickle.load(f) #computer
  208.  
  209. def join_group(self):
  210. print("{0.username} joining group {0.group}".format(self))
  211. try:
  212. headers = """
  213. Connection: keep-alive
  214. Upgrade-Insecure-Requests: 1
  215. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
  216. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  217. Accept-Encoding: gzip, deflate, sdch, br
  218. Accept-Language: en-US,en;q=0.8
  219. """
  220. r = self.s.get(url = self.group,
  221. headers = string_to_dict(headers),
  222. timeout = 20,
  223. cookies = self.cookies,
  224. verify = False)
  225. bs = BeautifulSoup(r.text.encode("utf-8"), "html.parser")
  226. # data = dict((elem.attrs["name"], elem.attrs["value"]) for elem in bs.find_all("input", {"type": "hidden"}) if elem.attrs["name"] and elem.attrs["value"])
  227. data = {}
  228. for elem in bs.find_all("input", {"type": "hidden"}):
  229. if "name" not in elem.attrs: continue
  230. if "value" not in elem.attrs: continue
  231. data[elem.attrs["name"]] = elem.attrs["value"]
  232. data.update({
  233. "__EVENTTARGET": "JoinGroupDiv",
  234. "__EVENTARGUMENT": "Click",
  235. "__LASTFOCUS": "",
  236. "ctl00$cphRoblox$GroupSearchBar$SearchKeyword": "Search all groups"
  237. # "ctl00$cphRoblox$rbxGroupRoleSetMembersPane$dlUsers_Footer$ctl01$PageTextBox": "1"
  238. # "ctl00$cphRoblox$GroupWallPane$GroupWallPager$ctl01$PageTextBox": "1"
  239. })
  240. inputs = ["ctl00$cphRoblox$rbxGroupRoleSetMembersPane$dlRolesetList",
  241. "ctl00$cphRoblox$rbxGroupRoleSetMembersPane$currentRoleSetID",
  242. "ctl00$cphRoblox$rbxGroupRoleSetMembersPane$RolesetCountHidden"]
  243. data[inputs[0]] = data[inputs[1]]
  244. data[inputs[2]] = bs.find("input", {"name": inputs[2]}).attrs["value"]
  245.  
  246. headers = """
  247. Connection: keep-alive
  248. Content-Length: {}
  249. Pragma: no-cache
  250. Cache-Control: no-cache
  251. Origin: https://www.roblox.com
  252. Upgrade-Insecure-Requests: 1
  253. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
  254. Content-Type: application/x-www-form-urlencoded
  255. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  256. Referer: {}
  257. Accept-Encoding: gzip, deflate, br
  258. Accept-Language: en-US,en;q=0.8
  259. """.format(len(str(data)), self.group)
  260. r = self.s.post(url = self.group,
  261. headers = string_to_dict(headers),
  262. data = data,
  263. timeout = 20,
  264. allow_redirects = True,
  265. cookies = self.cookies,
  266. # proxies = self.proxy,
  267. verify = False)
  268.  
  269. if r.status_code == 200 and "/My/" in r.url:
  270. print("{0.username} successfully joined {0.group}".format(self))
  271. with open("history.txt", "a") as f:
  272. f.write("{0.username}:{0.group}\n".format(self))
  273. global accounts_joined
  274. accounts_joined += 1
  275. return True
  276. # pprint(data)
  277. dump(r.text)
  278. except Exception as e:
  279. exc_type, exc_obj, exc_tb = sys.exc_info()
  280. fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
  281. print(exc_type, fname, exc_tb.tb_lineno)
  282. pass
  283. print("{0.username} could not join {0.group}".format(self))
  284. return False
  285.  
  286. def create(self, amount = 1):
  287. def retry():
  288. self.new_proxy()
  289. if amount < 10:
  290. try:
  291. self.create(amount = amount + 1)
  292. except Exception as e2:
  293. self.successfully_created = False
  294. print("{0.username} -> ERROR2 -> {1}".format(self, str(e2)))
  295. else:
  296. self.successfully_created = False
  297. # print("Tried 5 proxies, none of them worked.")
  298. pass
  299. print("Creating {0.username}... attempt #{1}".format(self, amount))
  300. self.s = requests.Session()
  301. headers = """
  302. Host: api.roblox.com
  303. Connection: keep-alive
  304. Content-Length: {}
  305. Accept: application/json, text/plain, */*
  306. Origin: https://www.roblox.com
  307. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
  308. Content-Type: application/x-www-form-urlencoded
  309. Referer: https://www.roblox.com/
  310. Accept-Encoding: gzip, deflate, br
  311. Accept-Language: en-US,en;q=0.8
  312. """
  313. data = "isEligibleForHideAdsAbTest=True&username={0.username}&password={0.password}&birthday=18+Dec+1941&gender={1}&context=RollerCoasterSignupForm"
  314. data = data.format(self, random.randint(2, 3))
  315. headers = headers.format(len(data))
  316.  
  317. r = None
  318.  
  319. try:
  320. r = self.s.post(url = "https://api.roblox.com/signup/v1",
  321. data = data,
  322. headers = string_to_dict(headers),
  323. proxies = self.proxy,
  324. timeout = 10,
  325. verify = False)
  326. except Exception as e:
  327. # print("{0.username} -> ERROR -> {1}".format(self, str(e)))
  328. self.successfully_created = False
  329. retry()
  330. return
  331.  
  332. try:
  333. userID = r.json()["userId"]
  334. if userID:
  335. self.userID = userID
  336. with open("accounts.txt", "a") as f:
  337. f.write("{0.username}:{0.password}:{0.email}:{0.userID}:{1}\n".format(self, self.proxy["https"].replace("https://", "").replace(":", ",")))
  338. self.successfully_created = True
  339. print("Successfully created {0.username}:{0.password}:{0.email}:{0.userID}:{1}".format(self, (self.proxy["https"] or "None").replace("https://", "").replace(":", ",")))
  340. global accounts_created
  341. accounts_created += 1
  342. used_proxies.append(self.proxy)
  343. self.save_cookies()
  344. except Exception as e:
  345. if r.json()["reasons"][0] == "Captcha":
  346. print("{0.username} -> CAPTCHA".format(self))
  347. self.successfully_created = False
  348. retry()
  349. return
  350. else:
  351. self.successfully_created = False
  352. print("{0.username} -> ERROR -> {1}, {2}".format(self, str(e), r.json()))
  353.  
  354.  
  355. def save_cookies(self):
  356. pickle.dump(self.s.cookies, open(PATH + "{0.username}.p".format(self), "wb"))
  357.  
  358. def new_proxy(self):
  359. self.proxy = random.choice(self.proxies)
  360. self.proxy = {"https": "https://" + self.proxy}
  361. if self.proxy in used_proxies:
  362. self.new_proxy()
  363. return
  364. return self.proxy
  365.  
  366.  
  367. def scrape():
  368. s = requests.Session()
  369. print("Scraping proxies.")
  370. proxies_urls = ["http://sslproxies24.blogspot.com/feeds/posts/default",
  371. "http://proxyserverlist-24.blogspot.com/feeds/posts/default"]
  372. proxies = []
  373. r = s.get(url = "http://proxieslounge.blogspot.com/")
  374. for proxy in r.text.split("style=\"background-color: #ffa123; font-size: 11px; height: 500px; overflow: auto; width: 140px;\">")[1].split("<")[0].split("\n"):
  375. if not proxy: continue
  376. proxies.append(proxy)
  377.  
  378. for proxies_url in proxies_urls:
  379. r = s.get(url = proxies_url)
  380.  
  381. for proxy in r.text.split("&lt;br /&gt;"):
  382. if not proxy: continue
  383. if (len(proxy) > 21 or len(proxy) < 10) or "span" in proxy: continue
  384. proxies.append(proxy)
  385. proxies = list(set(proxies))
  386. print("Found {} proxies".format(len(proxies)))
  387. return proxies
  388.  
  389.  
  390. # for _ in range(40):
  391. # manager.load(myThread(proxies=proxies))
  392.  
  393. # if len(sys.argv) == 3
  394.  
  395. def get_history():
  396. try:
  397. with open("history.txt", "r") as f:
  398. return f.read()
  399. except Exception as e:
  400. return ""
  401.  
  402. for _ in range(1):
  403. with open("config.txt", "r") as config:
  404. config = config.read()
  405. manager = ThreadManager(MAX_THREADS = int(config.split("\n")[0].split("=")[1]))
  406. proxies = None
  407. history = get_history()
  408.  
  409. try:
  410. with open("proxies.txt", "r") as p:
  411. proxies = p.read().split("\n")
  412. except Exception as e:
  413. proxies = scrape()
  414.  
  415. create_amount = int(config.split("\n")[1].split("=")[1])
  416. for _ in range(create_amount):
  417. manager.load(myThread(proxies=proxies))
  418.  
  419. max_amount = 0
  420. if "amount=" in config:
  421. max_amount = int(config.split("amount=")[1].split("\n")[0])
  422. print(max_amount)
  423.  
  424. reverse = 1
  425. offset = 0
  426.  
  427. accounts = glob.glob(PATH + "*.p")[::reverse][offset:]
  428. print(len(accounts))
  429. random.shuffle(accounts)
  430.  
  431. if "join=yes" in config:
  432. with open("groups.txt", "r") as groups:
  433. for group in groups.read().split("\n"):
  434. if not group: continue
  435. for account in accounts:
  436. if len(manager.threads) > max_amount: break
  437. account = account.replace(PATH, "").replace(".p", "")
  438. manager.load(myThread(proxies=proxies, username=account if not create_amount else None, group=group))
  439.  
  440. if "follow=yes" in config:
  441. with open("follow.txt", "r") as follows:
  442. for follow in follows.read().split("\n"):
  443. if not follow: continue
  444. for account in accounts:
  445. if len(manager.threads) > max_amount: break
  446. account = account.replace(PATH, "").replace(".p", "")
  447. manager.load(myThread(proxies=proxies, username=account if not create_amount else None, follow=follow))
  448.  
  449. if "favorite=yes" in config:
  450. with open("favorites.txt", "r") as favorites:
  451. for favorite in favorites.read().split("\n"):
  452. if not favorite: continue
  453. for account in accounts:
  454. if len(manager.threads) > max_amount: break
  455. account = account.replace(PATH, "").replace(".p", "")
  456. manager.load(myThread(proxies=proxies, username=account if not create_amount else None, favorite=favorite))
  457.  
  458. manager.start()
  459.  
  460. print("{} accounts created.".format(accounts_created))
  461. print("{} accounts joined to group.".format(accounts_joined))
  462. print("{} accounts liked an item.".format(accounts_favorited))
  463. print("{} accounts followed a user.".format(accounts_followed))
  464. # for account in glob.glob("cookies\\*.p")[:10]:
  465. # manager.load(myThread(proxies=proxies, username=account[8:-2], favorite="https://www.roblox.com/catalog/590588883/B-W-Nike-Shoes"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement