You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python+Selenium自动将生成的随机邮箱填入Chrome网页输入框?

解决随机生成邮箱并自动填入Selenium输入框的问题

核心问题修复

你代码里的email = print(randnames+random_4lettercomb+random_server_sel)是错误的——print函数的返回值是None,所以email变量实际是空值,自然没法传给send_keys填入输入框。

正确的做法是先把邮箱字符串赋值给email,再单独打印:

# 先拼接并赋值给email
email = randnames + random_4lettercomb + random_server_sel
# 再打印(可选)
print(email)

其他代码问题修正

除了核心问题,你的代码还有几个小问题需要调整:

  • order()函数里的「点击提交按钮」代码没有缩进,导致它不会在函数执行时运行
  • 代码开头先调用了driver.get()打开网页,后面if __name__ == '__main__'里又调用driver.get(keys['product_url']),会重复加载页面
  • 用time.sleep()等待页面加载不可靠,建议改用Selenium的WebDriverWait显式等待元素加载完成

修正后的完整代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from config import keys
import time
import random
import string
import nameslist

# 姓名列表来源注释
"NAMES"
"From https://www.usna.edu/Users/cs/roche/courses/s15si335/proj1/files.php%3Ff=names.txt.html"

e_address_count = 1
email_providers = ["yahoo","gmail","hotmail","outlook"]
tlds = [".com",".es"] # 可添加更多域名

# 生成随机邮箱
email = ""
for i in range(e_address_count):
    random_server_sel = "@" + random.choice(email_providers) + random.choice(tlds)
    randnames = random.choice(nameslist.Names)
    # 生成2位随机字母组合(原代码注释写的4位但实际生成2位,保留原逻辑)
    random_letter_comb = ''.join(random.choice(string.ascii_letters) for _ in range(2))
    email = randnames + random_letter_comb + random_server_sel
    print(email)

def timeme(method):
    def wrapper(*args, **kw):
        startTime = int(round(time.time() * 1000))
        result = method(*args, **kw)
        endTime = int(round(time.time() * 1000))
        print(f"执行耗时: {(endTime - startTime)/1000} s")
        return result
    return wrapper

# 初始化浏览器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

@timeme
def order():
    # 显式等待邮箱输入框加载完成,最多等10秒
    email_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="input_comp-lgb8swdu"]'))
    )
    email_input.send_keys(email)
    
    # 填写大号故障编号
    num_mayor_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="input_comp-lgb8qa87"]'))
    )
    num_mayor_input.send_keys(keys['numeromañor'])
    
    # 填写小号故障编号
    num_menor_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="login-form"]/div[5]/div/div/input'))
    )
    num_menor_input.send_keys(keys['numeromenor'])
    
    # 点击提交按钮(注意缩进,放到函数内部)
    submit_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '/html/body/div[1]/div/div[3]/div/main/div/div/div/div[2]/div/div/div/section[2]/div[2]/div/div[1]/div/div/form/div/div/div[6]/button/span'))
    )
    submit_btn.click()

if __name__ == '__main__':
    # 打开目标页面(只打开一次)
    driver.get(keys['product_url'])
    order()

关键修改说明

  1. 修复了邮箱赋值逻辑,确保email变量存储真实的邮箱字符串而非None
  2. 把所有元素操作改成显式等待,避免因页面加载慢导致的元素找不到错误
  3. 调整了提交按钮代码的缩进,确保它属于order函数的一部分
  4. 移除了重复的页面加载代码,只在main函数里打开一次目标页面
  5. 优化了计时函数的输出格式,更易读

内容的提问来源于stack exchange,提问作者diaverso 100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:45:31