注册流程

flow.drawio.png

关键技术

模拟点击

介绍一下Selenium

Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的行为,例如点击、输入、滚动等操作。Selenium支持多种编程语言,包括Java、Python、C#等,可以在不同的操作系统和浏览器上运行。

Selenium主要有三个组件:Selenium IDE、Selenium WebDriver和Selenium Grid。Selenium IDE是一个浏览器插件,可以录制和回放用户的操作,适合初学者使用。Selenium WebDriver是一个API,可以通过编程语言来控制浏览器,实现更加灵活的自动化测试。Selenium Grid是一个分布式测试工具,可以在多个机器上同时运行测试用例,提高测试效率。

Selenium的优点包括:可以模拟真实用户的操作,可以在多种浏览器和操作系统上运行,可以通过编程语言来控制浏览器,可以自动化测试大量的测试用例,可以提高测试效率和准确性。

Selenium的缺点包括:需要一定的编程技能,需要安装和配置浏览器驱动程序,需要维护测试脚本的稳定性和可维护性。

写一下python的示例代码

以下是一个简单的Python示例代码,用于使用Selenium WebDriver控制Chrome浏览器打开百度首页并搜索关键字:

from selenium import webdriver

# 创建Chrome浏览器实例
driver = webdriver.Chrome()

# 打开百度首页
driver.get("https://www.baidu.com")

# 在搜索框中输入关键字
search_box = driver.find_element_by_name("wd")
search_box.send_keys("Selenium")

# 点击搜索按钮
search_button = driver.find_element_by_id("su")
search_button.click()

# 等待搜索结果加载完成
driver.implicitly_wait(10)

# 获取搜索结果页面标题
title = driver.title
print("搜索结果页面标题:", title)

# 关闭浏览器
driver.quit()

以上代码使用了Selenium WebDriver的Python API,通过创建Chrome浏览器实例、定位页面元素、模拟用户操作等方式,实现了自动化搜索百度的功能。

邮箱操作

搭建一个邮箱服务

如何搭建一个邮箱服务

搭建一个邮箱服务需要一定的技术和资源,以下是一些基本的步骤:

  1. 选择邮件服务器软件:常见的邮件服务器软件有Postfix、Exim、Sendmail等,可以根据自己的需求和技术水平选择合适的软件。

  2. 配置邮件服务器:根据邮件服务器软件的文档和指南,进行基本的配置,包括域名、邮件账户、SMTP和POP3等协议的配置等。

  3. 配置DNS记录:为了让其他邮件服务器能够找到你的邮件服务器,需要在DNS中添加MX记录,指向你的邮件服务器的IP地址。

  4. 配置SSL证书:为了保证邮件传输的安全性,需要为邮件服务器配置SSL证书,可以使用免费的Let’s Encrypt证书或者购买商业证书。

  5. 配置反垃圾邮件和反病毒功能:为了防止垃圾邮件和病毒的传播,需要为邮件服务器配置反垃圾邮件和反病毒功能,可以使用开源软件如SpamAssassin和ClamAV等。

  6. 测试邮件服务:在配置完成后,需要进行测试,发送和接收邮件,确保邮件服务器正常工作。

以上是搭建一个基本的邮件服务器的步骤,需要注意的是,邮件服务器的安全性和稳定性非常重要,需要进行定期的维护和更新。

如何用 Postfix 搭建邮箱

Postfix是一款流行的邮件服务器软件,可以用于搭建邮件服务。以下是使用Postfix搭建邮箱的基本步骤:

  1. 安装Postfix:在Linux系统中,可以使用包管理器安装Postfix,例如在Ubuntu系统中,可以使用以下命令安装:

    sudo apt-get update
    sudo apt-get install postfix
    
  2. 配置Postfix:Postfix的配置文件位于/etc/postfix/main.cf,可以使用文本编辑器打开进行配置。以下是一些常见的配置项:

    • myhostname:设置邮件服务器的主机名。
    • mydomain:设置邮件服务器的域名。
    • mydestination:设置邮件服务器接受邮件的目标域名。
    • inet_interfaces:设置邮件服务器监听的网络接口。
    • smtpd_banner:设置SMTP服务的欢迎信息。

    配置完成后,需要重启Postfix服务使配置生效:

    sudo systemctl restart postfix
    
  3. 添加邮件账户:可以使用Linux系统自带的useradd命令添加邮件账户,例如:

    sudo useradd -m john
    

    这将创建一个名为john的用户,并在/home目录下创建一个与用户名相同的目录。

  4. 配置邮件客户端:可以使用常见的邮件客户端如Outlook、Thunderbird等,或者使用命令行工具如mutt、mail等,配置邮件客户端连接到Postfix服务器。

以上是使用Postfix搭建邮箱的基本步骤,需要注意的是,Postfix的配置非常灵活,可以根据自己的需求进行定制化配置。同时,为了保证邮件传输的安全性,需要为Postfix配置SSL证书。

TIPS:

  1. openai邮件也被墙了。所以邮箱服务器需要是国外的。
  2. 为了得到海量邮箱,需要配置通配符。让所有邮箱的邮件转到同一个用户下。

核心配置如下:

邮箱配置

/etc/postfix/main.cf


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mail.zhonghuipro.com
# iZrj93ic8g4x67yv30hte6Z
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = xxx1.com, xxx2.com, xxx3.com
relayhost =
mynetworks = 0.0.0.0/0
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
virtual_alias_maps = hash:/etc/postfix/virtual

邮箱映射

/etc/postfix/virtual

@xxx1.com root@xxx1.com
@xxx2.com root@xxx1.com
@xxx3.com root@xxx1.com

把xxx1.com,xxx2.com,xxx3.com这三个域名的所有邮件都转给root@xxx1.com

如果域名较多,可以用python脚本批量生成。

for i in range(500):
   print(f"@xxx{i}.com root@xxx1.com")

更新映射,重启服务

postmap /etc/postfix/virtual
systemctl restart postfix

收取邮件

服务本地收取的话用mutt就能查看。但没法程序获取。 一个思路是通过pop3远程收取? 但我没搞定。可能是端口网络问题,没成功。 换了一个思路。 在邮箱服务器,用python的mailbox库读取本地邮件文件,对外提供邮件查询接口。

获取邮件内容的核心代码


def get_mails(
        min_ts=None,
        mbox_file=None,
        extract_pattern=None,
        mail_from_pattern=None,
        mail_subject_pattern=None
):
    mbox_file = mbox_file or '/var/mail/root'
    extract_pattern = extract_pattern or 'https?://\S+email-verification\S+'
    mail_from_pattern = mail_from_pattern or 'openai\.com'
    mail_subject_pattern = mail_subject_pattern or 'OpenAI'

    mbox = mailbox.mbox(mbox_file)

    results = []
    for key in mbox.iterkeys():
        msg = mbox.get_message(key)
        mail_from = decode_str(msg['From'])
        subject = decode_str(msg['Subject'])
        mail_to = decode_str(msg['To'])
        if mail_from and isinstance(mail_from, str) \
                and re.search(mail_from_pattern, mail_from)\
                and re.search(mail_subject_pattern, subject):
            time_str = msg.get_from().split(" ", 1)[1].strip()
            time_obj = datetime.datetime.strptime(time_str, '%a %b %d %H:%M:%S %Y')
            ts = int(time_obj.timestamp())
            if min_ts and ts < min_ts:
                continue

            url_pattern = re.compile(extract_pattern)

            for part in msg.walk():
                content = get_mail_content(part)
                urls = url_pattern.findall(content)
                results += [{
                    'mail_from': mail_from,
                    'mail_to': mail_to,
                    'subject': subject,
                    'ts': ts,
                    'url': v
                } for v in urls]
    logger.info(results)
    return results

短信操作

使用第三方服务 https://sms-activate.org/

接口文档 https://sms-activate.org/api2

关键三个接口:

  1. 查询余额 getBalance,余额不足时需要及时充值提醒。
  2. 生成号码 getNumberV2,得到手机号和注册ID
  3. 获得派活码 getActiveActivations,得到验证码。

防止验证码

普通自动化测试会被识别要求填写验证码。 为了防止识别出是机器人。 需要做2点

  1. 把Selenium替换成undetected_chromedriver,做了去隙。
  2. 使用动态IP,每个ip低频注册。