|
@@ -0,0 +1,288 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+# -*- encoding: utf-8 -*-
|
|
|
+'''
|
|
|
+@Contact : liuyuqi.gov@msn.cn
|
|
|
+@Time : 2022/11/26 22:54:35
|
|
|
+@License : Copyright © 2017-2022 liuyuqi. All Rights Reserved.
|
|
|
+@Desc :
|
|
|
+'''
|
|
|
+
|
|
|
+import argparse
|
|
|
+import json,os,re,logging
|
|
|
+from time import sleep, time
|
|
|
+import random
|
|
|
+from twitter_account_creator.models.phone import Phone
|
|
|
+from twitter_account_creator.utils.chrome import Chrome
|
|
|
+from twitter_account_creator.utils.edge import Edge
|
|
|
+from twitter_account_creator.utils.firefox import Firefox
|
|
|
+from selenium.webdriver.common.by import By as by
|
|
|
+import requests
|
|
|
+from twitter_account_creator.models import api
|
|
|
+from selenium import webdriver
|
|
|
+from selenium.webdriver.common.keys import Keys
|
|
|
+
|
|
|
+class Twitter(object):
|
|
|
+
|
|
|
+ def __init__(self,proxy=None):
|
|
|
+ self.parser = None
|
|
|
+ self.sess=requests.Session()
|
|
|
+ self.sess.proxies={
|
|
|
+ "127.0.0.1:1080"
|
|
|
+ }
|
|
|
+ self.driver=None
|
|
|
+
|
|
|
+
|
|
|
+ def signup(self, apkKey :str, url, text, proxy=None):
|
|
|
+ '''注册'''
|
|
|
+ self.driver.get(api.signup)
|
|
|
+ time.sleep(5)
|
|
|
+
|
|
|
+ # 点击注册按钮
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Sign up with phone or email')]").click(); time.sleep(10)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # 获取手机号码,填入手机号码
|
|
|
+ try:
|
|
|
+ # driver.find_element(by.XPATH, "//span[contains(text(), 'Use email instead')]").click(); time.sleep(1.5)
|
|
|
+ _email = self.driver.find_element(by.XPATH, "//input[@name='phone_number']")
|
|
|
+ pv = Phone()
|
|
|
+ number, _id = pv.getNumber()
|
|
|
+ number = f"+34{number}"
|
|
|
+ time.sleep(3.5)
|
|
|
+ # driver.switch_to.window(driver.window_handles[0])
|
|
|
+ _email.click(); _email.send_keys(f"{number}")
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # 输入用户名
|
|
|
+ try:
|
|
|
+ name = self.getRandomName()
|
|
|
+ _name = self.driver.find_element(by.XPATH, "//input[@name='name']")
|
|
|
+ _name.click(); _name.send_keys(name); time.sleep(1.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//select[@id='SELECTOR_1']/option[@value='1']").click(); time.sleep(0.5)
|
|
|
+ self.driver.find_element(by.XPATH, "//select[@id='SELECTOR_2']/option[@value='1']").click(); time.sleep(0.5)
|
|
|
+ self.driver.find_element(by.XPATH, "//select[@id='SELECTOR_3']/option[@value='1987']").click(); time.sleep(0.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Sign up')]").click(); time.sleep(5.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'OK')]").click(); time.sleep(5.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+ time.sleep(105)
|
|
|
+ try:
|
|
|
+ ver =self.driver.find_element(by.XPATH, "//input[@name='verfication_code']")
|
|
|
+ # driver.switch_to.window(driver.window_handles[1])
|
|
|
+ # ver_code = get_code(driver, email)
|
|
|
+ check=True
|
|
|
+ while check:
|
|
|
+ # text_res = get_sms(_id)
|
|
|
+ ver_code = pv.get_sms(_id)
|
|
|
+ if ver_code != "" and ver_code != None:
|
|
|
+ check =False
|
|
|
+ time.sleep(5)
|
|
|
+ time.sleep(3.5)
|
|
|
+ # driver.switch_to.window(driver.window_handles[0])
|
|
|
+ ver.click(); ver.send_keys(ver_code)
|
|
|
+ time.sleep(1.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
|
|
|
+ # time.sleep(60*24)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # 输入密码
|
|
|
+ try:
|
|
|
+ password = self.driver.find_element(by.XPATH, "//input[@name='password']"); password.click(); password.send_keys("Vojko123")
|
|
|
+ time.sleep(5.5)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
|
|
|
+ # time.sleep(60*24)
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # check_phone_verification(driver, api_key)
|
|
|
+
|
|
|
+ if not os.path.exists("data/accounts"):
|
|
|
+ os.makedirs("data/accounts")
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Accept all cookies')]").click(); time.sleep(5.5)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+ try:
|
|
|
+ img_name = random.randint(1000, 9999)
|
|
|
+ open(f"data/{img_name}.jpg", "wb").write(requests.get("https://thispersondoesnotexist.com/image").content)
|
|
|
+ # img_info = random.choice(list(filter(None, open("infos.txt", "r").read().split("\n"))))
|
|
|
+ # img_name = img_info.split("\t")[0]
|
|
|
+ # bio = img_info.split("\t")[1]
|
|
|
+ time.sleep(3.5)
|
|
|
+ try:
|
|
|
+ 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"
|
|
|
+ except:
|
|
|
+ try:
|
|
|
+ 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"
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+ time.sleep(1.5)
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Apply')]").click(); time.sleep(1.5)
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
|
|
|
+ os.remove(f"data/{img_name}.jpg")
|
|
|
+ # os.remove(f"data/{img_name}")
|
|
|
+ except Exception as e:
|
|
|
+ # print(e)
|
|
|
+ pass
|
|
|
+
|
|
|
+ # try:
|
|
|
+ # txt_area = driver.find_element(by.XPATH, '//textarea[@data-testid="ocfEnterTextTextInput"]')
|
|
|
+ # txt_area.click(); txt_area.send_keys(bio); time.sleep(0.5)
|
|
|
+ # driver.find_element(by.XPATH, "//span[contains(text(), 'Next')]").click(); time.sleep(5.5)
|
|
|
+ # except:
|
|
|
+ # pass
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.driver.get("https://twitter.com"); time.sleep(7)
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Profile')]").click(); time.sleep(7)
|
|
|
+ except:
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//a[@data-testid='AppTabBar_Profile_Link']").click(); time.sleep(7)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+ try:
|
|
|
+ username_ = self.driver.current_url.replace("https://twitter.com/", "")
|
|
|
+ except:
|
|
|
+ username_ = ""
|
|
|
+ img_name = random.randint()
|
|
|
+ open(f"data/{img_name}.jpg", "wb").write(requests.get("https://thispersondoesnotexist.com/image").content)
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Edit profile')]").click(); time.sleep(5.5)
|
|
|
+ except:
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Set Up Profile')]").click(); time.sleep(5.5)
|
|
|
+ except:
|
|
|
+ try:
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Set up profile')]").click(); time.sleep(5.5)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+ # driver.find_element(by.XPATH, "//input[@data-testid='fileInput']").send_keys(f"data/{img_name}.jpg")
|
|
|
+ self.driver.find_elements(by.XPATH, "//input[@data-testid='fileInput']")[1].send_keys(os.path.abspath(f"data/{img_name}.jpg"))
|
|
|
+ time.sleep(1.5)
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Apply')]").click(); time.sleep(1.5)
|
|
|
+ self.driver.find_element(by.XPATH, "//span[contains(text(), 'Save')]").click(); time.sleep(5.5)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+
|
|
|
+ time.sleep(1.5)
|
|
|
+
|
|
|
+ # 评论
|
|
|
+ # driver.get(url); time.sleep(7)
|
|
|
+ # self.comments(driver, text)
|
|
|
+
|
|
|
+ # 写入账户
|
|
|
+ os.makedirs("data/accounts") if not os.path.exists("data/accounts") else False
|
|
|
+ with open("data/accounts/accounts.txt", "a") as file:
|
|
|
+ file.write(f"{number}:Vojko123:{username_}\n")
|
|
|
+ self.driver.quit()
|
|
|
+
|
|
|
+
|
|
|
+ def comments(self,driver,text):
|
|
|
+ try:
|
|
|
+ add_comment = driver.find_element(by.XPATH, "//div[@data-testid='reply']")
|
|
|
+ add_comment.click(); time.sleep(3.5)
|
|
|
+ add_comment = driver.find_element(by.XPATH, "//div[@data-testid='tweetTextarea_0']")
|
|
|
+ add_comment.click(); add_comment.send_keys(text); time.sleep(1.5)
|
|
|
+ add_comment.send_keys(" "); time.sleep(1.5)
|
|
|
+ try:
|
|
|
+ driver.find_element(by.XPATH, "//span[contains(text(), 'Reply')]").click()
|
|
|
+ except:
|
|
|
+ try:
|
|
|
+ driver.find_element(by.XPATH, "//span[contains(text(), 'Tweet')]").click()
|
|
|
+ except:
|
|
|
+ try:
|
|
|
+ add_comment.send_keys(Keys.ENTER)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+ # driver.find_element(by.XPATH, "//span[contains(text(), 'Tweet')]").click()
|
|
|
+ time.sleep(5.5)
|
|
|
+ e="Success comment"
|
|
|
+ except Exception as e:
|
|
|
+ # print(e)
|
|
|
+ return e
|
|
|
+ pass
|
|
|
+ return e
|
|
|
+
|
|
|
+ def phoneVerification(self, apiKey):
|
|
|
+ if self.driver.current_url==api.accountAccess:
|
|
|
+ try:
|
|
|
+ # self.driver.find_element(by=by.XPATH,"//")
|
|
|
+ # number,_id=pv.getNumber
|
|
|
+ pass
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ pass
|
|
|
+ finally:
|
|
|
+ pass
|
|
|
+
|
|
|
+ def getRandomName(self):
|
|
|
+ '''获取随机昵称'''
|
|
|
+ return json.loads(self.sess.get(api.getNickName).text)["name"]
|
|
|
+
|
|
|
+ def run(self):
|
|
|
+ # 下载驱动
|
|
|
+ self.chooseBrowser()
|
|
|
+ self.signup(apkKey="xx",url="",text="xx")
|
|
|
+
|
|
|
+
|
|
|
+ def chooseBrowser(self):
|
|
|
+ browserType=input("if you installed \r\n Chrome input 1,\r\n Edge input 2,\r\n Firefox iniput 3:\r\n")
|
|
|
+ # self.driver= webdriver.Chrome(executable_path=chrome_path,options=options)
|
|
|
+ # chrome = Chrome()
|
|
|
+ # self.driver=chrome.getWebdriver(proxy_address=proxy)
|
|
|
+ if browserType=="1":
|
|
|
+ self.driver=Chrome().getWebdriver()
|
|
|
+ elif browserType=="2":
|
|
|
+ self.driver=Edge().getWebdriver(proxy_address='127.0.0.1:1080')
|
|
|
+ elif browserType=="3":
|
|
|
+ self.driver=Firefox().getWebdriver()
|
|
|
+
|
|
|
+ def getArgs(self):
|
|
|
+ '''获取参数'''
|
|
|
+ self.parser = argparse.ArgumentParser(description="desc help")
|
|
|
+ self.parser.add_argument(
|
|
|
+ "--proxy", type=str, default="127.0.0.1:1080", help="input local proxy")
|
|
|
+ self.parser.add_argument(
|
|
|
+ "--pwd", type=str, default="123456", help="input password")
|
|
|
+ return self.parser.parse_args()
|