【Python】使用selenium对Poe批量模拟注册脚本

本文介绍了一个使用Python编写的脚本,通过配置接码API和Selenium库,实现了网站的自动化注册、登录过程,包括获取和输入手机验证码和邮箱验证码,以及模拟点击操作,30秒内可以完成一个账号的注册和登录测试。
摘要由CSDN通过智能技术生成

配置好接码api即可实现自动化注册登录试用一体。

运行后会注册账号并绑定邮箱与手机号进行登录试用。

在这里插入图片描述

测试结果30秒一个号

在这里插入图片描述
在这里插入图片描述

import re
import time
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import logging

# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# 获取手机验证码
def get_phone_verification_code(url):
    while True:
        try:
            response = requests.get(url)
            html_content = response.text

            # 使用正则表达式匹配验证码
            match = re.search(r'Your Poe verification code is: (\d+)\.', html_content)
            if match:
                code = match.group(1)
                logging.info("提取到的手机验证码: %s", code)
                return code  # 找到验证码则退出循环并返回验证码

            logging.info("未找到手机验证码,继续请求...")
            time.sleep(1)  # 等待 1 秒后再次请求

        except Exception as e:
            logging.error("请求手机验证码出错: %s", e)
            time.sleep(1)  # 出错时等待一段时间后再次请求

# 获取邮箱验证码
def get_email_verification_code(url):
    while True:
        response = requests.get(url)
        html_content = response.text

        # 使用正则表达式匹配 6 位数字
        match = re.search(r'\b\d{6}\b', html_content)
        if match:
            code = match.group()
            logging.info("提取到的邮箱验证码: %s", code)
            return code  # 找到验证码则退出循环并返回验证码

        # 如果页面中没有 6 位数字验证码,使用 BeautifulSoup 进行解析
        soup = BeautifulSoup(html_content, 'html.parser')
        pre_element = soup.find('pre')
        if pre_element:
            code = pre_element.text.strip()
            logging.info("提取到的邮箱验证码: %s", code)
            return code  # 找到验证码则退出循环并返回验证码

        logging.info("未找到邮箱验证码,继续请求...")
        time.sleep(1)  # 等待 1 秒后再次请求

# 登录循环
def login_loop(driver, wait_time):
        try:
            driver.delete_all_cookies()
            driver.get("https://poe.com/login")

            # 使用显式等待来等待按钮可见并且可点击
            use_phone_button = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), '使用电话')]"))
            )
            use_phone_button.click()
            logging.info("点击了 '使用电话' 按钮")

            # 获取电话号码
            with open("phone.txt", "r") as file:
                lines = file.readlines()

            first_line = lines[0].strip()
            phone, phone_url = first_line.split("----")
            logging.info("获取到的电话号码: %s", phone)

            with open("phone.txt", "w") as file:
                file.writelines(lines[1:])

            # 输入电话号码并点击下一步按钮
            phone_input = WebDriverWait(driver, wait_time).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, "input.PhoneNumberInput_phoneNumberInput__lTKZv"))
            )
            phone_input.send_keys(phone)
            phone_input.send_keys(Keys.RETURN)
            logging.info("输入电话号码并点击下一步按钮")

            # 输入电话号码验证码
            code_input = WebDriverWait(driver, wait_time).until(
                EC.presence_of_element_located(
                    (By.CSS_SELECTOR, "input.VerificationCodeInput_verificationCodeInput__RgX85"))
            )
            time.sleep(5)
            verification_code = get_phone_verification_code(phone_url)
            code_input.send_keys(verification_code)
            code_input.send_keys(Keys.RETURN)
            logging.info("输入电话号码验证码")

            # 获取邮箱
            with open("emai.txt", "r") as file:
                lines = file.readlines()

            first_line = lines[0].strip()
            email, email_url = first_line.split("----")
            logging.info("获取到的邮箱: %s", email)

            with open("emai.txt", "w") as file:
                file.writelines(lines[1:])

            # 输入邮件
            email_input = WebDriverWait(driver, wait_time).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, "input.EmailInput_emailInput__OfOQ_"))
            )
            email_input.send_keys(email)
            email_input.send_keys(Keys.RETURN)

            # 输入邮件验证码
            verification_code_input = WebDriverWait(driver, wait_time).until(
                EC.presence_of_element_located(
                    (By.CSS_SELECTOR, "input.VerificationCodeInput_verificationCodeInput__RgX85"))
            )
            time.sleep(5)
            logging.info("获取邮箱验证码")
            verification_code = get_email_verification_code(email_url)
            logging.info("提交邮箱验证码")
            verification_code_input.send_keys(verification_code)
            verification_code_input.send_keys(Keys.RETURN)
        finally:
            # 关闭浏览器
            driver.quit()

def main():
    # 设置等待时间
    wait_time = 30  # 以秒为单位

    while True:
        try:
            # 创建一个Chrome浏览器实例,启动无痕模式
            chrome_options = Options()
            chrome_options.add_argument(
                'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')
            chrome_options.add_argument('--lang=zh-CN')
            chrome_options.add_argument("--disable-blink-features=AutomationControlled")
            chrome_options.add_argument('--incognito')  # 启动无痕模式
            driver = webdriver.Chrome(options=chrome_options)
            login_loop(driver, wait_time)
        finally:
            # 关闭浏览器
            driver.quit()

if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值