twitter_creator.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. '''
  4. @Contact : liuyuqi.gov@msn.cn
  5. @Time : 2022/11/26 22:54:35
  6. @License : Copyright © 2017-2022 liuyuqi. All Rights Reserved.
  7. @Desc :
  8. '''
  9. import argparse
  10. import json,os,re,logging
  11. from time import sleep, time
  12. import random
  13. from twitter_account_creator.models.phone import Phone
  14. from twitter_account_creator.utils.chrome import Chrome
  15. from twitter_account_creator.utils.edge import Edge
  16. from twitter_account_creator.utils.firefox import Firefox
  17. from selenium.webdriver.common.by import By as by
  18. import requests
  19. from twitter_account_creator.models import api
  20. from selenium import webdriver
  21. from selenium.webdriver.common.keys import Keys
  22. class Twitter(object):
  23. def __init__(self,proxy=None):
  24. self.parser = None
  25. self.sess=requests.Session()
  26. self.sess.proxies={
  27. "127.0.0.1:1080"
  28. }
  29. self.driver=None
  30. def signup(self, apkKey :str, url, text, proxy=None):
  31. '''注册'''
  32. self.driver.get(api.signup)
  33. time.sleep(5)
  34. # 点击注册按钮
  35. try:
  36. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Sign up with phone or email')]").click(); time.sleep(10)
  37. except:
  38. pass
  39. # 获取手机号码,填入手机号码
  40. try:
  41. # driver.find_element(by.XPATH, "//span[contains(text(), 'Use email instead')]").click(); time.sleep(1.5)
  42. _email = self.driver.find_element(by.XPATH, "//input[@name='phone_number']")
  43. pv = Phone()
  44. number, _id = pv.getNumber()
  45. number = f"+34{number}"
  46. time.sleep(3.5)
  47. # driver.switch_to.window(driver.window_handles[0])
  48. _email.click(); _email.send_keys(f"{number}")
  49. except Exception:
  50. pass
  51. # 输入用户名
  52. try:
  53. name = self.getRandomName()
  54. _name = self.driver.find_element(by.XPATH, "//input[@name='name']")
  55. _name.click(); _name.send_keys(name); time.sleep(1.5)
  56. except Exception:
  57. pass
  58. try:
  59. self.driver.find_element(by.XPATH, "//select[@id='SELECTOR_1']/option[@value='1']").click(); time.sleep(0.5)
  60. self.driver.find_element(by.XPATH, "//select[@id='SELECTOR_2']/option[@value='1']").click(); time.sleep(0.5)
  61. self.driver.find_element(by.XPATH, "//select[@id='SELECTOR_3']/option[@value='1987']").click(); time.sleep(0.5)
  62. except Exception:
  63. pass
  64. try:
  65. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
  66. except Exception:
  67. pass
  68. try:
  69. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
  70. except Exception:
  71. pass
  72. try:
  73. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Sign up')]").click(); time.sleep(5.5)
  74. except Exception:
  75. pass
  76. try:
  77. self.driver.find_element(by.XPATH, "//span[contains(text(), 'OK')]").click(); time.sleep(5.5)
  78. except Exception:
  79. pass
  80. time.sleep(105)
  81. try:
  82. ver =self.driver.find_element(by.XPATH, "//input[@name='verfication_code']")
  83. # driver.switch_to.window(driver.window_handles[1])
  84. # ver_code = get_code(driver, email)
  85. check=True
  86. while check:
  87. # text_res = get_sms(_id)
  88. ver_code = pv.get_sms(_id)
  89. if ver_code != "" and ver_code != None:
  90. check =False
  91. time.sleep(5)
  92. time.sleep(3.5)
  93. # driver.switch_to.window(driver.window_handles[0])
  94. ver.click(); ver.send_keys(ver_code)
  95. time.sleep(1.5)
  96. except Exception:
  97. pass
  98. try:
  99. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
  100. except Exception:
  101. pass
  102. try:
  103. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
  104. # time.sleep(60*24)
  105. except Exception:
  106. pass
  107. # 输入密码
  108. try:
  109. password = self.driver.find_element(by.XPATH, "//input[@name='password']"); password.click(); password.send_keys("Vojko123")
  110. time.sleep(5.5)
  111. except Exception:
  112. pass
  113. try:
  114. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
  115. # time.sleep(60*24)
  116. except Exception:
  117. pass
  118. # check_phone_verification(driver, api_key)
  119. if not os.path.exists("data/accounts"):
  120. os.makedirs("data/accounts")
  121. try:
  122. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Accept all cookies')]").click(); time.sleep(5.5)
  123. except:
  124. pass
  125. try:
  126. img_name = random.randint(1000, 9999)
  127. open(f"data/{img_name}.jpg", "wb").write(requests.get("https://thispersondoesnotexist.com/image").content)
  128. # img_info = random.choice(list(filter(None, open("infos.txt", "r").read().split("\n"))))
  129. # img_name = img_info.split("\t")[0]
  130. # bio = img_info.split("\t")[1]
  131. time.sleep(3.5)
  132. try:
  133. self.driver.find_elements(by.XPATH, "//input[@data-testid='fileInput']")[1].send_keys(os.path.abspath(f"data/{img_name}.jpg")) # f"data/{img_name}.jpg"
  134. except:
  135. try:
  136. self.driver.find_element(by.XPATH, "//input[@data-testid='fileInput']").send_keys(os.path.abspath(f"data/{img_name}.jpg")) # f"data/{img_name}.jpg"
  137. except:
  138. pass
  139. time.sleep(1.5)
  140. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Apply')]").click(); time.sleep(1.5)
  141. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
  142. os.remove(f"data/{img_name}.jpg")
  143. # os.remove(f"data/{img_name}")
  144. except Exception as e:
  145. # print(e)
  146. pass
  147. # try:
  148. # txt_area = driver.find_element(by.XPATH, '//textarea[@data-testid="ocfEnterTextTextInput"]')
  149. # txt_area.click(); txt_area.send_keys(bio); time.sleep(0.5)
  150. # driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
  151. # except:
  152. # pass
  153. try:
  154. self.driver.get("https://twitter.com"); time.sleep(7)
  155. try:
  156. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Profile')]").click(); time.sleep(7)
  157. except:
  158. try:
  159. self.driver.find_element(by.XPATH, "//a[@data-testid='AppTabBar_Profile_Link']").click(); time.sleep(7)
  160. except:
  161. pass
  162. try:
  163. username_ = self.driver.current_url.replace("https://twitter.com/", "")
  164. except:
  165. username_ = ""
  166. img_name = random.randint()
  167. open(f"data/{img_name}.jpg", "wb").write(requests.get("https://thispersondoesnotexist.com/image").content)
  168. try:
  169. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Edit profile')]").click(); time.sleep(5.5)
  170. except:
  171. try:
  172. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Set Up Profile')]").click(); time.sleep(5.5)
  173. except:
  174. try:
  175. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Set up profile')]").click(); time.sleep(5.5)
  176. except:
  177. pass
  178. # driver.find_element(by.XPATH, "//input[@data-testid='fileInput']").send_keys(f"data/{img_name}.jpg")
  179. self.driver.find_elements(by.XPATH, "//input[@data-testid='fileInput']")[1].send_keys(os.path.abspath(f"data/{img_name}.jpg"))
  180. time.sleep(1.5)
  181. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Apply')]").click(); time.sleep(1.5)
  182. self.driver.find_element(by.XPATH, "//span[contains(text(), 'Save')]").click(); time.sleep(5.5)
  183. except:
  184. pass
  185. time.sleep(1.5)
  186. # 评论
  187. # driver.get(url); time.sleep(7)
  188. # self.comments(driver, text)
  189. # 写入账户
  190. os.makedirs("data/accounts") if not os.path.exists("data/accounts") else False
  191. with open("data/accounts/accounts.txt", "a") as file:
  192. file.write(f"{number}:Vojko123:{username_}\n")
  193. self.driver.quit()
  194. def comments(self,driver,text):
  195. try:
  196. add_comment = driver.find_element(by.XPATH, "//div[@data-testid='reply']")
  197. add_comment.click(); time.sleep(3.5)
  198. add_comment = driver.find_element(by.XPATH, "//div[@data-testid='tweetTextarea_0']")
  199. add_comment.click(); add_comment.send_keys(text); time.sleep(1.5)
  200. add_comment.send_keys(" "); time.sleep(1.5)
  201. try:
  202. driver.find_element(by.XPATH, "//span[contains(text(), 'Reply')]").click()
  203. except:
  204. try:
  205. driver.find_element(by.XPATH, "//span[contains(text(), 'Tweet')]").click()
  206. except:
  207. try:
  208. add_comment.send_keys(Keys.ENTER)
  209. except:
  210. pass
  211. # driver.find_element(by.XPATH, "//span[contains(text(), 'Tweet')]").click()
  212. time.sleep(5.5)
  213. e="Success comment"
  214. except Exception as e:
  215. # print(e)
  216. return e
  217. pass
  218. return e
  219. def phoneVerification(self, apiKey):
  220. if self.driver.current_url==api.accountAccess:
  221. try:
  222. # self.driver.find_element(by=by.XPATH,"//")
  223. # number,_id=pv.getNumber
  224. pass
  225. except Exception as e:
  226. pass
  227. finally:
  228. pass
  229. def getRandomName(self):
  230. '''获取随机昵称'''
  231. return json.loads(self.sess.get(api.getNickName).text)["name"]
  232. def run(self):
  233. # 下载驱动
  234. self.chooseBrowser()
  235. self.signup(apkKey="xx",url="",text="xx")
  236. def chooseBrowser(self):
  237. browserType=input("if you installed \r\n Chrome input 1,\r\n Edge input 2,\r\n Firefox iniput 3:\r\n")
  238. # self.driver= webdriver.Chrome(executable_path=chrome_path,options=options)
  239. # chrome = Chrome()
  240. # self.driver=chrome.getWebdriver(proxy_address=proxy)
  241. if browserType=="1":
  242. self.driver=Chrome().getWebdriver()
  243. elif browserType=="2":
  244. self.driver=Edge().getWebdriver(proxy_address='127.0.0.1:1080')
  245. elif browserType=="3":
  246. self.driver=Firefox().getWebdriver()
  247. def getArgs(self):
  248. '''获取参数'''
  249. self.parser = argparse.ArgumentParser(description="desc help")
  250. self.parser.add_argument(
  251. "--proxy", type=str, default="127.0.0.1:1080", help="input local proxy")
  252. self.parser.add_argument(
  253. "--pwd", type=str, default="123456", help="input password")
  254. return self.parser.parse_args()