如何使用C#结合Selenium从文本框输入列表随机选取内容发送至网页
问题根因
你的代码存在3个核心错误导致无法实现随机选单条发送的效果:
- 随机逻辑写在
TextBox_TextChanged事件中,生成的随机索引、文本列表都是局部变量,按钮点击事件中完全无法访问这些值 - 没有对多行文本框的内容按行拆分,直接将整个文本内容作为唯一元素存入列表,无论怎么随机永远只能拿到全部内容
- 局部创建
Random实例,如果触发频率过高会出现重复随机结果的问题
调整后的完整代码
using OpenQA.Selenium.Chrome; using OpenQA.Selenium; using System.Windows; using System.Collections.Generic; using System; using System.Threading; namespace emails { public partial class MainWindow : Window { // 类级别随机数实例,避免重复随机 private readonly Random _random = new Random(); // 存储拆分后的所有输入行 private List<string> _inputLines = new List<string>(); public MainWindow() { InitializeComponent(); } private void TextBox_TextChanged(object sender, TextChangedEventArgs e) { // 按换行符拆分文本,过滤空行、空白行后存入列表 _inputLines = question1.Text .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries) .FindAll(line => !string.IsNullOrWhiteSpace(line)); } private void Button_Click(object sender, RoutedEventArgs e) { // 没有输入内容直接返回 if (_inputLines.Count == 0) return; // 随机取一条内容 int randomIndex = _random.Next(_inputLines.Count); string contentToSend = _inputLines[randomIndex]; ChromeDriver driver = new ChromeDriver(@"C:\webdrivers"); string url = "https://accounts.google.com/signin/v2/identifier?continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&sacu=1&rip=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin"; driver.Navigate().GoToUrl(url); driver.FindElement(By.ClassName("whsOnd")).SendKeys(contentToSend); Thread.Sleep(2000); // 可补充后续操作逻辑、驱动释放逻辑 } } }
关键修改说明
- 新增类级别的
_random和_inputLines字段,跨事件共享数据 - 文本框内容变更时自动按行拆分、过滤无效空行,更新可用内容列表
- 按钮点击时先校验是否有可用内容,再随机取单条内容发送
- 清理了原代码中未使用的冗余变量
drv、th
内容的提问来源于stack exchange,提问作者golden leo
相关产品推荐
相关产品推荐

