Sh_o0_ter Дата: Воскресенье, 07 Декабря 2014, 10:20 | Сообщение # 1
PARANOIA
Сейчас нет на сайте
Ребят, в C# пока вообще нуль, а мне тут поставили задачу: Нужна программка, которая на определенной(указанной мной) странице сайта, будет 1 раз клацать на баттн(ну то бишь тут надо код самой этой кнопки), потом, она берет из листа прокси, другой АйПи и проделывает тоже самое. По сути это я так понял, что-то вроде накручивалки
Сообщение отредактировал Sh_o0_ter - Воскресенье, 07 Декабря 2014, 10:36
V1talik30 Дата: Пятница, 12 Декабря 2014, 15:00 | Сообщение # 2
VIGO Development
Сейчас нет на сайте
Основная часть:
Код
string[] t = textBox2.Text.Split('\n'); listBox1.Items.Add("Прочитано прокси серверов: " + t.Length.ToString()); foreach (string t1 in t) { if (t1 != "" && t1.Contains(":")) { string[] t2 = t1.Split(':'); listBox1.Items.Add("Смена прокси сервера на: " + t1); Proxy.Set(new WebProxy(t2[0], Convert.ToInt32(t2[1]))); listBox1.Items.Add("Прокси сервер: " + t1 + "успешно установлен"); listBox1.Items.Add("Загрузка URL: " + textBox1.Text); webBrowser1.Navigate(textBox1.Text); while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } try { if (textBox4.Text == "Id") { listBox1.Items.Add("Поиск кнопки по Id: " + textBox3.Text); webBrowser1.Document.GetElementById(textBox3.Text).InvokeMember("Click"); listBox1.Items.Add("Кнопка успешно нажата"); this.Refresh(); } if (textBox4.Text == "Name") { listBox1.Items.Add("Поиск кнопки по Name: " + textBox3.Text); HtmlElementCollection elmCol; elmCol = webBrowser1.Document.Body.GetElementsByTagName("button"); foreach (HtmlElement elm in elmCol) { if (elm.GetAttribute("name") == textBox3.Text) { elm.InvokeMember("Click"); } } listBox1.Items.Add("Кнопка успешно нажата"); this.Refresh(); } if (textBox4.Text == "Class") { listBox1.Items.Add("Поиск кнопки по Class: " + textBox3.Text); HtmlElementCollection elmCol; elmCol = webBrowser1.Document.GetElementsByTagName("button"); foreach (HtmlElement elmBtn in elmCol) { if (elmBtn.GetAttribute("className") == textBox3.Text) { elmBtn.InvokeMember("Click"); } } listBox1.Items.Add("Кнопка успешно нажата"); this.Refresh(); } } catch { listBox1.Items.Add("Ошибка поиска кнопки"); } } }
Внутренний класс меняющий прокси сервер элемента WebBrowser:
Код
internal static class Proxy { #region //wininet Interop private enum MyOptions { INTERNET_PER_CONN_FLAGS = 1, INTERNET_PER_CONN_PROXY_SERVER = 2, INTERNET_PER_CONN_PROXY_BYPASS = 3, INTERNET_PER_CONN_AUTOCONFIG_URL = 4, INTERNET_PER_CONN_AUTODISCOVERY_FLAGS = 5, INTERNET_OPTION_REFRESH = 37, INTERNET_OPTION_PER_CONNECTION_OPTION = 75, INTERNET_OPTION_SETTINGS_CHANGED = 39, PROXY_TYPE_PROXY = 0x00000002, PROXY_TYPE_DIRECT = 0x00000001 } private enum ROptions { INTERNET_PER_CONN_FLAGS = 1, INTERNET_PER_CONN_PROXY_SERVER = 2, INTERNET_PER_CONN_PROXY_BYPASS = 3, INTERNET_PER_CONN_AUTOCONFIG_URL = 4, INTERNET_PER_CONN_AUTODISCOVERY_FLAGS = 5, INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL = 6, INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS = 7, INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME = 8, INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL = 9, INTERNET_OPTION_REFRESH = 37, INTERNET_OPTION_PER_CONNECTION_OPTION = 75, INTERNET_OPTION_SETTINGS_CHANGED = 39, INTERNET_OPTION_PROXY = 38, INTERNET_OPEN_TYPE_PROXY = 3 } [Flags] private enum Flags { PROXY_TYPE_DIRECT = 0x00000001, //Интернет доступ через прямое соединение(без прокси) PROXY_TYPE_PROXY = 0x00000002, //Интернет доступ используя прокси PROXY_TYPE_AUTO_PROXY_URL = 0x00000004, PROXY_TYPE_AUTO_DETECT = 0x00000008 } [Flags] private enum ProxyFlags { AUTO_PROXY_FLAG_USER_SET = 0x00000001, AUTO_PROXY_FLAG_ALWAYS_DETECT = 0x00000002, AUTO_PROXY_FLAG_DETECTION_RUN = 0x00000004, AUTO_PROXY_FLAG_MIGRATED = 0x00000008, AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT = 0x00000010, AUTO_PROXY_FLAG_CACHE_INIT_RUN = 0x00000020, AUTO_PROXY_FLAG_DETECTION_SUSPECT = 0x00000040 } [StructLayout(LayoutKind.Explicit, Size = 12)] private struct INTERNET_PER_CONN_OPTION { [FieldOffset(0)] public int dwOption; [FieldOffset(4)] public int dwValue; [FieldOffset(4)] public IntPtr pszValue; [FieldOffset(4)] public IntPtr ftValue; public byte[] GetBytes() { byte[] b = new byte[12]; BitConverter.GetBytes(dwOption).CopyTo(b, 0); switch (dwOption) { case (int)MyOptions.INTERNET_PER_CONN_FLAGS: BitConverter.GetBytes(dwValue).CopyTo(b, 4); break; case (int)MyOptions.INTERNET_PER_CONN_PROXY_BYPASS: BitConverter.GetBytes(pszValue.ToInt32()).CopyTo(b, 4); break; case (int)MyOptions.INTERNET_PER_CONN_PROXY_SERVER: BitConverter.GetBytes(pszValue.ToInt32()).CopyTo(b, 4); break; } return b; } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] private class INTERNET_PER_CONN_OPTION_LIST { public int dwSize; public string pszConnection; public int dwOptionCount; public int dwOptionError; public IntPtr pOptions; } [StructLayout(LayoutKind.Sequential)] private struct INTERNET_PROXY_INFO { public int dwAccessType; public IntPtr lpszProxy; public IntPtr lpszProxyBypass; } private const int ERROR_INSUFFICIENT_BUFFER = 122; private const int INTERNET_OPTION_PROXY = 38; private const int INTERNET_OPEN_TYPE_DIRECT = 1; private const int INTERNET_OPEN_TYPE_PROXY = 3; [DllImport("wininet.dll", SetLastError = true)] private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, INTERNET_PER_CONN_OPTION_LIST lpBuffer, int dwBufferLength); [DllImport("wininet.dll", SetLastError = true)] private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); [DllImport("kernel32.dll")] private static extern int GetLastError(); #endregion public static bool Set(WebProxy wProxy) { try { bool bReturn = false; INTERNET_PROXY_INFO info = new INTERNET_PROXY_INFO(); string sPrx = ""; if (wProxy != null) { sPrx = wProxy.Address.DnsSafeHost + ":" + wProxy.Address.Port; info.dwAccessType = INTERNET_OPEN_TYPE_PROXY; } else { info.dwAccessType = INTERNET_OPEN_TYPE_DIRECT; } info.lpszProxy = Marshal.StringToHGlobalAnsi(sPrx); info.lpszProxyBypass = Marshal.StringToHGlobalAnsi("rado.ra-host.com"); IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(info)); Marshal.StructureToPtr(info, intptrStruct, true); bReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(info)); bReturn = InternetSetOption(IntPtr.Zero, (int)MyOptions.INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); Marshal.FreeCoTaskMem(intptrStruct); return bReturn; } catch (Exception) { throw; } } }
Бинари: ButtonClickBin.zip Исходник: ButtonClickSource.zip P.S. Важно что бы адреса прокси серверов были рабочие.