Se ti devi scorrere tutti gli elementi non è che tu possa fare molto diversamente...
In prima battuta comunque già potresti evitarti una marea di lookup di GetElementsByTagName("option") & co. salvandoti il riferimento fuori dal ciclo:
Ma sospetto comunque che il grosso del tempo siano le millemila chiamate al codice JavaScript della pagina.codice:private void button2_Click(object sender, EventArgs e) { foreach (InternetExplorer ie in new ShellWindows()) { if (ie.LocationURL.Contains("aams")) { var output = ie.Document.GetElementsByTagName("option"); var aggiungi = ie.Document.GetElementsByTagName("input")["aggiungi"]; for (int i = 1; i < output.length - 1; i++) { if (output[i].InnerText.Contains("testo da cercare")) { output[i].SetAttribute("selected", "true"); aggiungi.Click(); break; } } // eccetera