C# Selenium如何按顺序读取TextBox姓名列表依次填充网页表单
修正后代码实现
首先建议你在界面新增一个「开始执行」按钮,把业务逻辑写到按钮点击事件中,不要写在TextChanged事件内避免输入时误触发:
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System.Threading; using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } // 开始执行按钮点击事件 private void BtnStart_Click(object sender, RoutedEventArgs e) { string baseEmail = question1.Text; string baseRegion = country.Text; string baseSize = size.Text; // 按空格拆分姓名输入框内容,保留输入顺序,过滤空值 string[] nameList = name.Text.Split(' ', System.StringSplitOptions.RemoveEmptyEntries); string targetUrl = "https://docs.google.com/forms/d/e/1FAIpQLSeI8_vYyaJgM7SJM4Y9AWfLq-tglWZh6yt7bEXEOJr_L-hV1A/viewform"; // 顺序遍历所有姓名执行操作 foreach (string currentName in nameList) { // 每个姓名单独初始化驱动,避免缓存影响 ChromeDriver driver = new ChromeDriver(@"C:\webdrivers"); try { driver.Navigate().GoToUrl(targetUrl); // 等待页面加载完成,可根据网络情况调整等待时长 Thread.Sleep(1500); // 填入邮箱 driver.FindElement(By.ClassName("quantumWizTextinputPaperinputInput")).SendKeys(baseEmail); // 填入当前循环的姓名 driver.FindElement(By.ClassName("quantumWizTextinputPapertextareaInput")).SendKeys(currentName); // 按索引获取同className的不同输入框,避免定位错误 var simpleInputs = driver.FindElements(By.ClassName("quantumWizTextinputSimpleinputInput")); // 填入区域 simpleInputs[0].SendKeys(baseRegion); // 填入尺寸 simpleInputs[1].SendKeys(baseSize); // 此处可补充表单提交代码、提交成功判断逻辑,确保当前姓名完整流程走完 // 示例:driver.FindElement(提交按钮选择器).Click(); Thread.Sleep(2000); } finally { // 关闭当前浏览器,再进入下一个姓名的处理 driver.Quit(); driver.Dispose(); } } } // 原有TextChanged事件可保留用于输入校验 private void TextBox_TextChanged_1(object sender, System.Windows.Controls.TextChangedEventArgs e) { } private void size_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) { } private void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) { } }
核心修改说明
- 替换了无序的HashSet,改为按空格拆分的字符串数组,严格保留你在姓名输入框中输入的前后顺序
- 把整个表单处理逻辑包裹在姓名遍历循环内部,确保前一个姓名的所有网页操作(加载、填写、提交)完成后,才处理下一个姓名
- 修复了同className元素定位错误的问题,用
FindElements获取元素列表后按索引区分区域和尺寸输入框 - 所有输入值直接绑定对应TextBox控件属性,直接修改控件名称就能对应取值
内容的提问来源于stack exchange,提问作者golden leo
相关产品推荐
相关产品推荐

