【Python】使用selenium对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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/469718.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

#Ubuntu(修改root信息)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)命令行终端: a.右键,open terminal b.快捷键 ctrlaltt (2)进行root修改 sudo passwd &a…

3月19日做题

[NPUCTF2020]验证🐎 if (first && second && first.length second.length && first!second && md5(firstkeys[0]) md5(secondkeys[0]))用数组绕过first1&second[1] 这里正则规律过滤位(Math.) (?:Math(?:\.\w)?) : 匹配 …

PX4|基于FAST-LIO mid360的无人机室内自主定位及定点悬停

目录 前言环境配置运行fast-lio修改px4位置信息融合方式编写位置坐标转换及传输节点 前言 在配置mid360运行环境后,可使用mid360进行室内的精准定位。 环境配置 在livox_ros_driver2的上级目录src下保存fast-lio的工程 git clone https://github.com/hku-mars/F…

在Ubuntu20.04(原为cuda12.0, gcc9.几版本和g++9.几版本)下先安装cuda9.0后再配置gcc-5环境

因为自己对Linux相关操作不是很熟悉,所以因为之前的代码报错之后决定要安cuda9.0,于是先安装了cuda9.0。里面用到的一些链接,链接文件夹时直接去copy它的路径,就不那么容易错了。 今天运行程序之后发现gcc环境不太匹配cuda9.0&am…

2024/03/19(网络编程·day5)

一、思维导图 二、selec函数实现TCP并发服务器 #include<myhead.h>#define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.117.116" //服务器IP int main(int argc, const char *argv[]) {//1、创建一个套接字int sfd -1;sfd socket(AF_INET,SOC…

Vue技能树总结01

Vue vs React 相似之处: 它们都有使用 Virtual DOM&#xff1b;提供了响应式&#xff08;Reactive&#xff09;和组件化&#xff08;Composable&#xff09;的视图组件。将注意力集中保持在核心库&#xff0c;而将其他功能如路由和全局状态管理交给相关的库。React 比 Vue 有更…

备战蓝桥杯---牛客寒假训练营2VP

题挺好的&#xff0c;收获了许多 1.暴力枚举&#xff08;许多巧妙地处理细节方法&#xff09; n是1--9,于是我们可以直接暴力&#xff0c;对于1注意特判开头0但N&#xff01;1&#xff0c;对于情报4&#xff0c;我们可以把a,b,c,d的所有取值枚举一遍&#xff0c;那么如何判断有…

关系数据库:关系数据结构基础与概念解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

微信小程序开发学习笔记——4.4常见的导航栏api接口

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p29&vd_source9b149469177ab5fdc47515e14cf3cf74 一、属性 界面 / 导航栏 / wx.showNavigationBar…

使用Java JDBC连接数据库

在Java应用程序中&#xff0c;与数据库交互是一个常见的任务。Java数据库连接&#xff08;JDBC&#xff09;是一种用于在Java应用程序和数据库之间建立连接并执行SQL查询的标准API。通过JDBC&#xff0c;您可以轻松地执行各种数据库操作&#xff0c;如插入、更新、删除和查询数…

python二级--jieba库知识点简明整理

前言 本文是我学习过程的总结。 &#xff08;针对的是二级对于jieba库的考点&#xff09; jieba简介 用于把中文长句分割成中文词组。 jieba三模式 精确模式&#xff1a;把文本精确的切分开&#xff0c;不存在冗余单词 全模式&#xff1a;把文本中所有可能的词语都扫描出…

CTFHUB-web-信息泄漏

题目所在位置&#xff1a;技能树->web->信息泄漏 目录遍历 打开题目&#xff0c;我们进入的是这个页面 翻译过来就是 得到的信息就是&#xff1a;flag要在这些目录里面寻找&#xff0c;我们直接一个一个点开查看就行 发现得到一个flag.txt&#xff0c;点击打开得到flag …

堆排序(数据结构)

本期讲解堆排序的实现 —————————————————————— 1. 堆排序 堆排序即利用堆的思想来进行排序&#xff0c;总共分为两个步骤&#xff1a; 1. 建堆 • 升序&#xff1a;建大堆 • 降序&#xff1a;建小堆 2. 利用堆删除思想来进行排序. 建堆和堆删…

自动驾驶决策 - 规划 - 控制 (持续更新!!!)

总目录 Frenet与Cartesian坐标系 Apollo基础 - Frenet坐标系 车辆模型 车辆运动学和动力学模型 控制算法 PID控制器轨迹跟随实现 Pure Pursuit控制器路径跟随 路径跟踪算法Stanley 实现 c 无人驾驶LQR控制算法 c 实现 MPC自动驾驶横向控制算法实现 c 双环PID控制详细讲解 …

鸿蒙开发实战:【网络管理-Socket连接】

介绍 本示例主要演示了Socket在网络通信方面的应用&#xff0c;展示了Socket在两端设备的连接验证、聊天通信方面的应用。 效果预览 使用说明 1.打开应用&#xff0c;点击用户文本框选择要登录的用户&#xff0c;并输入另一个设备的IP地址&#xff0c;点击确定按钮进入已登录…

JavaScript高级系列(三) - JavaScript的运行过程

一. 全局代码的执行过程 1.1. ECMA的版本说明 在ECMA早期的版本&#xff08;ECMAScript3&#xff09;&#xff0c;代码的执行流程的术语和ECMAScript5以及之后的术语会有所区别&#xff1a; 目前网上大多数流行的说法都是基于ECMAScript3版本的解析&#xff0c; 并且在面试问…

实现el-table合并列

效果图如下 <el-table :data"atlasDataList" style"width: 100%" :span-method"spanMethod"><el-table-column prop"stationName" label"" width"180" /><el-table-column prop"atlasNumbe…

网络编程—DAY5

select实现的TCP并发服务器 #include <myhead.h> #define SER_PORT 8888 #define SER_IP "192.168.117.96"int main(int argc, const char *argv[]) {int sfd -1;sfd socket(AF_INET,SOCK_STREAM,0);if(sfd -1){perror("socket");return -1;}prin…

LVGL:拓展部件——键盘 lv_keyboard

一、概述 此控件特点&#xff1a; 特殊Button矩阵&#xff1a;lv_keyboard 本质上是一个经过定制的按钮矩阵控件。每个按钮都可以独立触发事件或响应。预定义的键映射&#xff1a;lv_keyboard 自带了一套预设的按键布局和对应的字符映射表&#xff0c;开发者可以根据需要选择…

【Vue3】Vue3中的编程式路由导航 重点!!!

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…