iknew 发表于 2019-7-25 11:19

【原创】批量自动注册OneDrive 5T 账号python+selenium实现

本帖最后由 iknew 于 2019-12-10 14:59 编辑

里面用到的临时邮箱地址已经不能用了...如果有需要可以自己去找找类似的可用邮箱,大多都可以直接替换域名,如果邮箱网页模板和我给的这个不一样需要自己改下代码中的元素名称更新一下,程序主要就两块儿:
sign_up()功能:
1. 设置临时邮箱
2. 填写注册信息
3. 等待验证
4. 填写验证码
5. 完成注册


main()功能:
1. 注册名称设置
2. selenium参数设置
3. 调用sign_up()
4. 注册后的账号密码写入文件

潜水三年贡献本人第一帖(其实2013还是14年那会儿就注册了,只是账号忘了),第一次发帖,有违规地方请及时提醒修改,多谢!

https://static.52pojie.cn/static/image/hrline/line5.png
前段时间学习python,本来是为了数据分析的,结果学偏了学到爬虫这块儿了...0_o ,碰巧前些日子需要用到OneDrive,在吾爱找到了免费注册5t的方法,发现利用临时邮箱可以无限注册0_o .. o_0 ,而且某宝上有很多卖OneDrive的,就想着应该可以批量注册,也就有了下面的代码。


本人小白,代码中很多不规范、臃肿的地方,有大神发现希望能提供更好的方法,多谢!
短时间内注册太多ip会被封20分钟左右,由于网上的免费代、理太垃圾我就把换ip的那部分代码去掉了。
由于还没学习多线程,注册效率完全跟网速挂钩,希望有好的方法可以提出讨论


以下代码仅供参考讨论,请勿用于商业或者非法用途,否则,一切后果请自负!!
以下代码仅供参考讨论,请勿用于商业或者非法用途,否则,一切后果请自负!!
以下代码仅供参考讨论,请勿用于商业或者非法用途,否则,一切后果请自负!!

# coding = utf-8
# 以下代码仅供参考讨论,请勿用作其它非法用途
# www.52pojie.cn

# python 3.7
# @Author:iknew

from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import selenium
import time
import csv
import random
from mock_useragent import UserAgent

‘’‘1. 设置临时邮箱
2. 填写注册信息
3. 等待验证
4. 填写验证码
5. 完成注册
’‘’

def sign_up(name,pwd):
    global element
    email = name + '@t.odmail.cn'

    url = 'https://t.odmail.cn/'
    code = ''
    browser.get(url)
    time.sleep(3)
    try:
      browser.implicitly_wait(15)
      element = browser.find_element_by_id('customShortid')
    except selenium.common.exceptions.NoSuchElementException:
      print('网页加载不出来')
      sign_up(name,pwd)
    element.click()
    browser.implicitly_wait(5)
    browser.find_element_by_id('shortid').send_keys(name)
    browser.implicitly_wait(5)
    element.click()
    print('email set up ...')
    # browser.execute_script(js)
    js = 'window.open("https://signup.microsoft.com/signup/index?sku=faculty");'
    browser.execute_script(js)
    windows = browser.window_handles
    browser.switch_to.window(windows)
    browser.implicitly_wait(30)
    browser.find_element_by_id("StepsData_Email").send_keys(email)
    browser.implicitly_wait(2)
    browser.find_element_by_class_name('mpl-button-box-text').click()
    browser.switch_to.window(windows)
    print('waiting for verification code ...')

    while code == '':
      time.sleep(3)
      browser.find_element_by_id('maillist')
      r = browser.find_element_by_id('maillist').text
      code = r
    print('Got the verification code:{}\n'.format(code))
    browser.implicitly_wait(10)
    #切换窗口到注册页面填写信息、验证码:
    browser.switch_to.window(windows)
    browser.implicitly_wait(20)
    try:   
      element = browser.find_element_by_class_name('last-name')
      element.send_keys('o')
    except selenium.common.exceptions.ElementNotInteractableException: browser.quit()
    browser.implicitly_wait(5)
    browser.find_element_by_class_name('first-name').send_keys('o')
    browser.implicitly_wait(5)
    browser.find_element_by_id('Password').send_keys(pwd)
    browser.implicitly_wait(5)
    browser.find_element_by_id('RePassword').send_keys(pwd)
    browser.implicitly_wait(5)
    browser.find_element_by_id('SignupCode').send_keys(code)
    browser.implicitly_wait(10)
    browser.find_element_by_class_name('mpl-button-box-text').click()
    print('注册的账号密码:{0},{1},验证码:{2}\n'.format(email,pwd,code))
    try:   
      browser.implicitly_wait(20)
      element = browser.find_element_by_class_name('ms-fcl-tp')
      element.click()
    except selenium.common.exceptions.StaleElementReferenceException:
      browser.refresh()
    return

’‘’1. 注册名称设置2. selenium参数设置
3. 调用sign_up()
4. 注册后的账号密码写入文件
'''
def main():
    global browser
    n = 0
    for i in range(1,1000):#   设置注册ID范围,程序中断需要手动修改起始位置...      
      name = '这里填你想要的名称'+str(i)
      pwd = 'One.'+str(random.randint(1000,9990))

      t = time.time()
      agent = UserAgent.random_chrome
      options = Options()
      options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors"])#避免一些无关紧要的报错
      options.add_argument('--user-agent={}'.format(agent))
      options.add_argument('--ignore-certificate-errors')
      options.add_argument('--ignore-ssl-errors')
      options.add_argument('--start-maximized')   #窗口最大化,感觉不太需要
      options.add_argument('--window-size=1920,1080')#设置窗口大小
      options.add_argument('--headless')          # 后台运行,可注释掉查看自动注册流程
      browser = webdriver.Chrome(chrome_options= options)
#调用sign_up函数注册
      user = sign_up(name,pwd)
      f = open('onedrive.csv','a',newline='')
      writer = csv.writer(f)
      f.seek(0,2)
      writer.writerow(user)
      f.close()
      n += 1
      print('Time now:{0}'.format(time.strftime("%Y%m%d %X", time.localtime())))
      print('注册第 "{}"个用时:{:.2f} 秒'.format(n,time.time()-t),end='\n---------------------')
      browser.quit()
      if n % 20 == 0 :
            print('休息10分钟,避免IP被封')
            time.sleep(600)

if __name__ == "__main__":
    main()


老新人求点免费评分,谢谢啦




h888866j 发表于 2019-8-5 15:34

本帖最后由 h888866j 于 2019-8-6 13:26 编辑

iknew 发表于 2019-8-5 13:24
额,附件的代码和贴子里的代码行数不一样我忘了,,你把95行↓↓注释掉
optio ...
这次可以了,但是有点问题,


email set up ...
waiting for verification code ...
Got the verification code:692383

注册的账号密码:123@t.odmail.cn,One.53,验证码:692383

Traceback (most recent call last):
File "C:/Users/h888866j/Desktop/onedrive.py", line 114, in <module>
    main()
File "C:/Users/h888866j/Desktop/onedrive.py", line 99, in main
    user = sign_up(name,pwd)
File "C:/Users/h888866j/Desktop/onedrive.py", line 76, in sign_up
    element.click()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable
(Session info: headless chrome=75.0.3770.142)
(Driver info: chromedriver=70.0.3538.97 (d035916fe243477005bc95fe2a5778b8f20b6ae1),platform=Windows NT 10.0.15063 x86_64)

iknew 发表于 2019-8-5 13:24

本帖最后由 iknew 于 2019-8-5 13:26 编辑

h888866j 发表于 2019-8-5 13:12
不行的,都没走到110行。99行跳到16行,再往下走,应该还在48行那个循环里没出来。

可能需要
额,附件的代码和贴子里的代码行数不一样我忘了,,你把95行↓↓注释掉
options.add_argument('--headless')          # 后台运行,可注释掉查看自动注册流程
再看看,等验证码的时间跟你的网速也有关系,网速快的话30秒左右,不好的话等验证码要等100秒也正常

lioow_19960806 发表于 2019-7-25 11:29

看起来,很厉害的样子呀

17711600400 发表于 2019-7-25 11:31

:lol不懂,但是要装着很懂的样子

摇裤儿 发表于 2019-7-25 11:32

这些代码完全看不懂,先码一个

天际遥山小 发表于 2019-7-25 11:33

看起来很厉害的样子

zzgaot 发表于 2019-7-25 11:35

先收藏了,慢慢再消化。

cduang 发表于 2019-7-25 11:43

先收藏啦,谢谢楼主分享

世间寂寞 发表于 2019-7-25 11:52

先收藏,后面再试一试

wangxingchun 发表于 2019-7-25 11:54

西式蛋糕 发表于 2019-7-25 11:55

支持,虽然看不懂-_-||
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【原创】批量自动注册OneDrive 5T 账号python+selenium实现