首页 > 编程语言 >【Python】使用selenium对Poe批量模拟注册脚本

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

时间:2024-03-19 23:00:11浏览次数:28  
标签:code logging Python selenium 验证码 phone time input Poe

配置好接码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()

标签:code,logging,Python,selenium,验证码,phone,time,input,Poe
From: https://blog.csdn.net/qq_45007567/article/details/136857189

相关文章

  • Python 机器学习 HMM模型三种经典问题
    ​ 隐马尔可夫模型(HiddenMarkovModel,HMM)是一个强大的工具,用于模拟具有隐藏状态的时间序列数据。HMM广泛应用于多个领域,如语音识别、自然语言处理和生物信息学等。在处理HMM时,主要集中于三个经典问题:评估问题、解码问题和学习问题。三个问题构成了使用隐马尔可夫模型时的基础......
  • 一文了解Python中的运算
    Python的运算符和其他语言类似数学运算>>>print 1+9        # 加法>>>print 1.3-4      # 减法>>>print 3*5        # 乘法>>>print 4.5/1.5    # 除法>>>print 3**2       # 乘方     >>>print 10%3      ......
  • Python小白的福利之基本数据类型
    简单的数据类型以及赋值变量不需要声明Python的变量不需要声明,你可以直接输入:>>>a = 10那么你的内存里就有了一个变量a,它的值是10,它的类型是integer(整数)。在此之前你不需要做什么特别的声明,而数据类型是Python自动决定的。>>>print a>>>print type(a)那......
  • Python 数据持久层ORM框架 TorToise模块(异步)
    文章目录TortoiseORM简介TortoiseORM特性TortoiseORM安装TortoiseORM数据库支持TortoiseORM创建模型aerich迁移工具简介aerich迁移工具安装aerich迁移工具使用TrotoiseORM查询数据TrotoiseORM修改数据TrotoiseORM删除数据TrotoiseORM新增数据......
  • 【蓝桥杯选拔赛真题70】python最短路径和 第十五届青少年组蓝桥杯python选拔赛真题 算
    目录python最短路径和一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、 推荐资料1、蓝桥杯比赛2、考级资料3、其它资料python最短路径和第十五届蓝桥杯青少年组python比赛选拔赛真题一、题目要求(注:i......
  • Python的优点和缺点(详细解说版本)——《跟老吕学Python编程》附录资料
    Python的优点和缺点(详细解说版本)——《跟老吕学Python编程》附录资料Python的优点和缺点Python的优点Python语法简单Python是开源的程序员使用Python编写的代码是开源的。Python解释器和模块是开源的。Python是免费的Python是高级语言Python是解释型语言,能跨平......
  • Python面向对象编程之多态你学会了吗?
    在Python面向对象编程中,多态是一个非常重要的概念。多态意味着一个接口可以有多种实现方式,或者说一个接口可以被多种对象所实现。这在编程中非常重要,因为它可以帮助我们编写更加灵活和可扩展的代码。想象一下,如果你有一个函数,它需要处理不同的对象,但是这些对象都实现了同一......
  • Python面向对象编程之多继承,你真的懂了吗?
    hi,大家好!今天我们来聊聊Python面向对象编程中的一个重要概念——多继承!如果你还没搞清楚这个概念,那就赶紧跟着我一起学习吧!首先,我们来了解一下什么是继承。在面向对象编程中,继承是一个让子类可以继承父类的属性和方法的机制。这样,我们就可以避免重复编写相同的代码,并且让代......
  • python27安装pygame
    参考:https://cloud.tencent.com/developer/article/2089701我安装的是1.9.3版本https://pypi.org/project/pygame/1.9.3/#files按照自己本地的环境下载,比如我的是python27,windows64,我安装的就是 pygame-1.9.3-cp27-cp27m-win_amd64.whl安装命令:pipinstallxxxx.whl 试......
  • Python中的深拷贝与浅拷贝有什么区别?
    在Python中,深拷贝和浅拷贝是处理复合对象(例如列表、字典等含有其他对象的对象)时常用到的两种方法。它们之间的主要区别在于复制过程中对内嵌对象的处理方式。###浅拷贝(ShallowCopy)浅拷贝创建了一个新对象,其内容是对原始对象中内容的引用。这意呀着,如果原始对象中的元......