一、所需资源:
1、上一篇文章讲到的批量注册TVapple帐号的数据
2、可收取验证码的邮箱
3、可接码的手机号
二、整体实现思路:
首先我们通过API是对于我来说是比较难实现的,因为据观察接口请求中参数校验过多,cookie中的参数涉及js逆向分析,所以本次采用模拟用户点击方式进行实现批量注册,在加上多线程运行,可以达到非常好的效果。
三、具体实现
1.引入driver:
需要注意的是chrome浏览器版本大于115、116左右的版本时chromedriver就不能通过ChromeDriverManager类进行下载更新了,所以暂时使用的是手动下载,更新driver也并非本次主线任务,所以在这里说明一下避免踩坑。
最新chromedriver下载地址: Chrome for Testing availability
def PC_driver():
# server = Service(ChromeDriverManager().install())
server = Service("./chromedriver.exe")
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(service=server, options=chrome_options)
driver.maximize_window()
return driver
2.元素定位:
这里主要是进行页面点击事件一些交互输入信息,输入邮箱验证码、以及手机号验证码。
self.driver = PC_driver()
self.driver.get("https://appleid.apple.com/")
self.by_find_element(By.XPATH, '//*[@id="root"]/div[3]/main/div/div[1]/div[2]/div/button').click()
self.by_find_element(By.ID, 'account_name_text_field').send_keys(self.accountName)
self.by_find_element(By.ID, 'sign-in').click()
self.by_find_element(By.ID, 'password_text_field').send_keys(self.accountPaw)
self.by_find_element(By.ID, 'sign-in').click()
# 验证元素是否存在
if self.is_login(By.XPATH, '//*[@id="signin"]/app-title'):
# 输入邮箱验证码
if self.readMailCode():
# 输入手机号,点击发送手机验证码,输入手机验证码进行提交
self.by_find_element(By.XPATH, '//*[@class="form-textbox form-textbox-text"]').send_keys(
self.phoneNum)
self.by_find_element(By.XPATH, '//*[@class="button button-primary"]').click()
if self.readPhomeCode():
self.by_find_element(By.XPATH, '//*[@class="button button-primary"]').click()
self.by_find_element(By.XPATH, '//*[@class="button button-primary"]').click()
print(f"{self.accountName} 绑定成功!!!")
3.多线程:
增加线程组,可设置自定义,经测试每次运行50个并发,1分钟内完成绑定完全没有问题,不过具体看机器,和电脑配置有关。
for _appleIds in appleIdsList:
threads = []
for _appleid in _appleIds:
CAI = CreaateAppleID(_appleid.split(','))
thread1 = threading.Thread(target=CAI.createAppleId)
threads.append(thread1)
for t in threads:
t.start()
for thread in threads:
thread.join()
以上就是批量绑定的整体过程以及思路,希望对大家有所帮助!