/***************************************************************************** * FUNCTION: ManageDataConnections * Description: * Parameters: None *****************************************************************************/ private void ManageDataConnections() { String pUrl = TemplateRequestStr; MSHTML.HTMLDocument htmlresponse = new MSHTML.HTMLDocument(); MSHTML.IHTMLDocument2 webresponse = (MSHTML.IHTMLDocument2)htmlresponse; if (LockedForUpdate == false) { LockedForUpdate = true; //Disable timer ticks LiveSessionTimer.Stop(); SendMessage(this.ParentFormPtr, WM_UPDATING_DATA, IntPtr.Zero, IntPtr.Zero); /**** Download Data ****/ pUrl += "?noconstruct=1" + "&smlID=" + ActiveMarket.smlId + "&sid=" + ActiveMarket.sid + "&tabletype=price" + "&index_id=" + ActiveMarket.id; webresponse = Helpers.HTMLRequestResponse(pUrl); //Parse the downloaded HTML file if (HistoricalData == null) { HistoricalData = new ExchangeMarket(); } HistoricalData.parseHtmlLiveData(webresponse, pUrl, ActiveMarket.name); SendMessage(this.ParentFormPtr, WM_LIVEUPDATE, IntPtr.Zero, IntPtr.Zero); LockedForUpdate = false; LiveSessionTimer.Start(); } }
public static void TestPOSTRequest() { WebRequest request; WebResponse response; StreamReader reader; GZipStream gzipStream; string responseText; MSHTML.HTMLDocument htmlresponse = new MSHTML.HTMLDocument(); MSHTML.IHTMLDocument2 webresponse = (MSHTML.IHTMLDocument2)htmlresponse; string body = "curr_id=24442&smlID=1169009&st_date=11%2F18%2F2016&end_date=11%2F18%2F2017&interval_sec=Daily&sort_col=date&sort_ord=DESC&action=historical_data"; try { request = WebRequest.Create("https://ca.investing.com/instruments/HistoricalDataAjax"); request.Credentials = CredentialCache.DefaultCredentials; ((HttpWebRequest)request).Accept = "*/*"; ((HttpWebRequest)request).Method = "POST"; ((HttpWebRequest)request).UserAgent = DEFAULT_USER_AGENT; ((HttpWebRequest)request).Referer = "http://ca.investing.com/equities/canada"; ((HttpWebRequest)request).Headers.Add("Accept-Encoding", "gzip,deflate"); ((HttpWebRequest)request).Headers.Add("X-Requested-With", "XMLHttpRequest"); ((HttpWebRequest)request).Timeout = 20000; request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; request.ContentLength = body.Length; Stream rStream = request.GetRequestStream(); rStream.Write(body.Select(c => (byte)c).ToArray(), 0, body.Length); response = request.GetResponse(); if (response.Headers.Get("Content-Encoding").ToLower().Contains("gzip")) { gzipStream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress); reader = new StreamReader(gzipStream); } else { reader = new StreamReader(response.GetResponseStream()); } responseText = reader.ReadToEnd(); webresponse.write(responseText); while (webresponse.body == null) { System.Windows.Forms.Application.DoEvents(); } webresponse.close(); reader.Close(); response.Close(); } catch (Exception) { /* Do nothing */ //int stophere = 1; } }
public IESelectorItem(MSHTML.HTMLDocument Document) { // this.element = new IEElement(element); Properties = new ObservableCollection <SelectorItemProperty>(); if (!string.IsNullOrEmpty(Document.title)) { Properties.Add(new SelectorItemProperty("title", Document.title)); } Properties.Add(new SelectorItemProperty("Selector", "IE")); Properties.Add(new SelectorItemProperty("url", Document.url)); foreach (var p in Properties) { p.Enabled = true; p.canDisable = (Properties.Count > 1); } ; foreach (var p in Properties) { p.PropertyChanged += (sender, e) => { OnPropertyChanged("Displayname"); OnPropertyChanged("json"); } } ; }
/***************************************************************************** * FUNCTION: UpdateLiveData * Description: * Parameters: * pLiveUrl - *****************************************************************************/ public Boolean UpdateLiveData(String pLiveUrl = "") { bool success = true; MSHTML.HTMLDocument htmlresponse = new MSHTML.HTMLDocument(); MSHTML.IHTMLDocument2 webresponse = (MSHTML.IHTMLDocument2)htmlresponse; try { if (pLiveUrl != "") { LiveDataAddress = pLiveUrl; } if (LiveDataAddress != "") { webresponse = Helpers.HTMLRequestResponse(LiveDataAddress); ParseLiveData(webresponse); } } catch (Exception e) { success = false; } return(success); }
private static void SendToCHIS(string bp1, string bp2) { string Url = System.Configuration.ConfigurationManager.AppSettings["Url"]; SHDocVw.InternetExplorer ie = getInternetExploer(Url); if (ie != null) { try { MSHTML.HTMLDocument doc = ie.Document; object oFrameIndex = 0; var f = (doc.frames.item(ref oFrameIndex)).document; f.getElementById("DefaultContent_Console_2001001_1").innerText = bp1; f.getElementById("DefaultContent_Console_2001001_2").innerText = bp2; f.getElementById("DefaultContent_Console_2001001_2").blur(); //用来触发页面js里的GetConsole2001001() // traverseNodes(f.documentElement, ref cont); } catch (Exception) { MessageBox.Show("请先将CHIS转到内科页面再测量血压"); } } else { MessageBox.Show("没有找到IE Url:" + Url); } }
private void WebBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { textBox1.Text = webBrowser1.Document.Url.ToString(); MSHTML.HTMLDocument doc = (MSHTML.HTMLDocument)webBrowser1.Document.DomDocument; MSHTML.HTMLDocumentEvents2_Event iEvent; iEvent = (MSHTML.HTMLDocumentEvents2_Event)doc; iEvent.onclick += new MSHTML.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler); }
public static MSHTML.IHTMLDocument2 HTMLRequestResponse(String pUrl) { WebRequest request; WebResponse response; StreamReader reader; GZipStream gzipStream; string responseText; MSHTML.HTMLDocument htmlresponse = new MSHTML.HTMLDocument(); MSHTML.IHTMLDocument2 webresponse = (MSHTML.IHTMLDocument2)htmlresponse; try { if (pUrl != "") { request = WebRequest.Create(pUrl); request.Credentials = CredentialCache.DefaultCredentials; ((HttpWebRequest)request).Accept = "*/*"; ((HttpWebRequest)request).UserAgent = DEFAULT_USER_AGENT; ((HttpWebRequest)request).Referer = "http://ca.investing.com/equities/canada"; ((HttpWebRequest)request).Headers.Add("Accept-Encoding", "gzip,deflate,br"); ((HttpWebRequest)request).Headers.Add("X-Requested-With", "XMLHttpRequest"); ((HttpWebRequest)request).KeepAlive = true; ((HttpWebRequest)request).Timeout = 20000; response = request.GetResponse(); if (response.Headers.Get("Content-Encoding").ToLower().Contains("gzip")) { gzipStream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress); reader = new StreamReader(gzipStream); } else { reader = new StreamReader(response.GetResponseStream()); } responseText = reader.ReadToEnd(); webresponse.write(responseText); while (webresponse.body == null) { System.Windows.Forms.Application.DoEvents(); } webresponse.close(); reader.Close(); response.Close(); } } catch (Exception) { /* Do nothing */ //int stophere = 1; } return(webresponse); }
protected override void Execute(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new IESelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); if (maxresults < 1) { maxresults = 1; } IEElement[] elements = { }; if (WaitForReady.Get(context)) { var browser = Browser.GetBrowser(); MSHTML.HTMLDocument doc = browser.Document; var sw2 = new Stopwatch(); sw2.Start(); while (sw2.Elapsed < timeout && doc.readyState != "complete" && doc.readyState != "interactive") { // Log.Debug("pending complete, readyState: " + doc.readyState); System.Threading.Thread.Sleep(100); } } var sw = new Stopwatch(); sw.Start(); do { elements = IESelector.GetElementsWithuiSelector(sel, from); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } context.SetValue(Elements, elements); IEnumerator <IEElement> _enum = elements.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } else { throw new Interfaces.ElementNotFoundException("Failed locating item"); } }
private void enumElements(Browser browser, MSHTML.IHTMLElement baseelement, IESelector anchor, bool doEnum, int X, int Y) { MSHTML.IHTMLElement element = baseelement; MSHTML.HTMLDocument document = browser.Document; var pathToRoot = new List <MSHTML.IHTMLElement>(); while (element != null) { if (pathToRoot.Contains(element)) { break; } try { pathToRoot.Add(element); } catch (Exception) { } try { element = element.parentElement; } catch (Exception ex) { Log.Error(ex.ToString()); return; } } // Log.Selector(string.Format("IEselector::create pathToRoot::end {0:mm\\:ss\\.fff}", sw.Elapsed)); pathToRoot.Reverse(); if (anchor != null) { // var hasIframe = anchor.Where(x => x.Properties.Where(y=>y.Name=="tagName" && y.Value== "IFRAME").Count()>0).Count() > 0; var iframeidx = 0; for (var i = 0; i < anchor.Count(); i++) { if (anchor[i].Properties.Where(y => y.Name == "tagName" && y.Value == "IFRAME").Count() > 0) { iframeidx = i; break; } } var anchorlist = anchor.Where(x => x.Enabled && x.Selector == null).ToList(); //if (iframeidx>-1) //{ // for (var i = 0; i < iframeidx; i++) // { // pathToRoot.Remove(pathToRoot[0]); // } //} for (var i = (iframeidx); i < anchorlist.Count(); i++) { //if (((IESelectorItem)anchorlist[i]).Match(pathToRoot[0])) if (IESelectorItem.Match(anchorlist[i], pathToRoot[0])) { pathToRoot.Remove(pathToRoot[0]); } else { Log.Selector("Element does not match the anchor path"); return; } } } if (pathToRoot.Count == 0) { Log.Error("Element is same as annchor"); return; } element = pathToRoot.Last(); // // Log.Selector(string.Format("IEselector::remove anchor if needed::end {0:mm\\:ss\\.fff}", sw.Elapsed)); IESelectorItem item; if (anchor == null && Items.Count == 0) { item = new IESelectorItem(browser.Document); item.Enabled = true; //item.canDisable = false; Items.Add(item); } for (var i = 0; i < pathToRoot.Count(); i++) { var o = pathToRoot[i]; item = new IESelectorItem(browser, o); if (i == 0 || i == (pathToRoot.Count() - 1)) { item.canDisable = false; } foreach (var p in item.Properties) { int idx = p.Value.IndexOf("."); if (p.Name == "className" && idx > -1) { int idx2 = p.Value.IndexOf(".", idx + 1); if (idx2 > idx) { p.Value = p.Value.Substring(0, idx2 + 1) + "*"; } } } if (doEnum) { item.EnumNeededProperties(o, o.parentElement); } Items.Add(item); } if (frameTags.Contains(baseelement.tagName.ToUpper())) { //var ele2 = baseelement as MSHTML.IHTMLElement2; //var col2 = ele2.getClientRects(); //var rect2 = col2.item(0); //X -= rect2.left; //Y -= rect2.top; var frame = baseelement as MSHTML.HTMLFrameElement; var fffff = frame.contentWindow; MSHTML.IHTMLWindow2 window = frame.contentWindow; MSHTML.IHTMLElement el2 = null; foreach (string frameTag in frameTags) { MSHTML.IHTMLElementCollection framesCollection = document.getElementsByTagName(frameTag); foreach (MSHTML.IHTMLElement _frame in framesCollection) { // var _f = _frame as MSHTML.HTMLFrameElement; el2 = browser.ElementFromPoint(_frame, X, Y); //var _wb = _f as SHDocVw.IWebBrowser2; //document = _wb.Document as MSHTML.HTMLDocument; //el2 = document.elementFromPoint(X, Y); if (el2 != null) { var tag = el2.tagName; // var html = el2.innerHTML; Log.Selector("tag: " + tag); //browser.elementx += _frame.offsetLeft; //browser.elementy += _frame.offsetTop; //browser.frameoffsetx += _frame.offsetLeft; //browser.frameoffsety += _frame.offsetTop; enumElements(browser, el2, anchor, doEnum, X, Y); return; } } } } }
protected override void StartLoop(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new IESelector(selector); var timeout = Timeout.Get(context); if (Timeout == null || Timeout.Expression == null) { timeout = TimeSpan.FromSeconds(3); } var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } IEElement[] elements = { }; if (timeout.Minutes > 5 || timeout.Hours > 1) { Activity _Activity = null; try { var strProperty = context.GetType().GetProperty("Activity", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var strGetter = strProperty.GetGetMethod(nonPublic: true); _Activity = (Activity)strGetter.Invoke(context, null); } catch (Exception) { } if (_Activity != null) { Log.Warning("Timeout for Activity " + _Activity.Id + " is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } else { Log.Warning("Timeout for on of your IE.GetElements is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } } if (WaitForReady.Get(context)) { var browser = Browser.GetBrowser(false); MSHTML.HTMLDocument doc = browser.Document; var sw2 = new Stopwatch(); sw2.Start(); string readyState = ""; while (sw2.Elapsed < timeout && readyState != "complete" && readyState != "interactive") { try { readyState = doc.readyState; } catch (Exception) { browser = Browser.GetBrowser(true); } // Log.Debug("pending complete, readyState: " + doc.readyState); System.Threading.Thread.Sleep(100); } } var sw = new Stopwatch(); sw.Start(); do { elements = IESelector.GetElementsWithuiSelector(sel, from, maxresults); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } if (elements.Length < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } context.SetValue(Elements, elements); IEnumerator <IEElement> _enum = elements.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { IncIndex(context); SetTotal(context, elements.Length); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
/***************************************************************************** * FUNCTION: updateDataManagerConfig * Description: * Parameters: None *****************************************************************************/ private bool updateDataManagerConfig() { bool success = true; int index1, index2; //Web Request / Response locals String baseUrl, subUrl, responseText, parseText; WebRequest request; WebResponse response; MSHTML.HTMLDocument htmlresponse = new MSHTML.HTMLDocument(); MSHTML.IHTMLDocument2 webresponse = (MSHTML.IHTMLDocument2)htmlresponse; //Xml objects XmlDocument configFile = new XmlDocument(); XmlNodeList nodeList, keyNodeList, subNodeList, configMarketsNodeList, configOptionNodeList; XmlDocument KeyElement = new XmlDocument(); XmlNode marketNode; StreamReader reader; List <String> listOfMarkets; List <String> listOfOptions; string application_path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); string config_path = Path.Combine(application_path, MyMarketAnalyzer.Properties.Resources.DataManagerConfigPath); config_path = new Uri(config_path).LocalPath; configFile.Load(config_path); nodeList = configFile.SelectNodes("Datamanager/Live/Markets/Schema"); index1 = -1; index2 = -1; parseText = ""; try { baseUrl = nodeList[0].Attributes.GetNamedItem("url").InnerText; request = WebRequest.Create(baseUrl); request.Credentials = CredentialCache.DefaultCredentials; ((HttpWebRequest)request).Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; ((HttpWebRequest)request).UserAgent = DEFAULT_USER_AGENT; ((HttpWebRequest)request).Timeout = 20000; response = request.GetResponse(); reader = new StreamReader(response.GetResponseStream()); responseText = reader.ReadToEnd(); reader.Close(); response.Close(); //write response to string webresponse.write(responseText); //begin search for the menu items we want keyNodeList = GetConfiguredItems(responseText, configFile, "Datamanager/Live/Markets/Schema/"); configMarketsNodeList = configFile.SelectNodes("Datamanager/Live/Markets/Data/Market"); listOfMarkets = new List <string>(); for (int i = 0; i < configMarketsNodeList.Count; i++) { listOfMarkets.Add(configMarketsNodeList[i].Attributes.GetNamedItem("name").InnerText); } //For each geographic location, get the list of available markets / indexes foreach (XmlNode subNode in keyNodeList) { if (subNode.InnerXml != "") { index1 = subNode.OuterXml.IndexOf("href=\"", 0) + 6; index2 = subNode.OuterXml.IndexOf("\"", index1); parseText = subNode.OuterXml.Substring(index1, index2 - index1); subUrl = (new Uri(new Uri(baseUrl), parseText)).ToString(); if (parseText.Substring(0, 1) != "/") { parseText = "/" + parseText; } if (listOfMarkets.Contains(subNode.InnerXml)) { marketNode = configMarketsNodeList[listOfMarkets.IndexOf(subNode.InnerXml)]; } else { marketNode = configFile.CreateNode("element", "Market", ""); XmlAttribute atHref = configFile.CreateAttribute("href"); atHref.Value = parseText; XmlAttribute atName = configFile.CreateAttribute("name"); atName.Value = subNode.InnerText; marketNode.Attributes.Append(atHref); marketNode.Attributes.Append(atName); configFile.SelectNodes("Datamanager/Live/Markets/Data")[0].InsertAfter(marketNode, configMarketsNodeList[configMarketsNodeList.Count - 1]); } responseText = ""; request = WebRequest.Create(subUrl); request.Credentials = CredentialCache.DefaultCredentials; ((HttpWebRequest)request).Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; ((HttpWebRequest)request).UserAgent = DEFAULT_USER_AGENT; ((HttpWebRequest)request).Timeout = 20000; response = request.GetResponse(); reader = new StreamReader(response.GetResponseStream()); responseText = reader.ReadToEnd(); reader.Close(); response.Close(); //write response to string webresponse.write(responseText); subNodeList = GetConfiguredItems(responseText, configFile, "Datamanager/Live/Markets/Data/Schema/"); listOfOptions = new List <string>(); configOptionNodeList = null; if (marketNode.HasChildNodes) { configOptionNodeList = marketNode.SelectNodes("option"); for (int i = 0; i < configOptionNodeList.Count; i++) { listOfOptions.Add(configOptionNodeList[i].Attributes.GetNamedItem("id").InnerText); } } foreach (XmlNode optionNode in subNodeList) { //Only add options that aren't already in the list (based on id) if (!listOfOptions.Contains(optionNode.Attributes.GetNamedItem("id").InnerText)) { XmlNode newOption = configFile.ImportNode(optionNode, true); if (configOptionNodeList == null) { marketNode.AppendChild(newOption); } else { marketNode.InsertAfter(newOption, configOptionNodeList[configOptionNodeList.Count - 1]); } } } } } configFile.Save(config_path); } catch (Exception e) { success = false; } return(success); }
protected override void StartLoop(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new IESelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } IEElement[] elements = { }; if (WaitForReady.Get(context)) { var browser = Browser.GetBrowser(false); MSHTML.HTMLDocument doc = browser.Document; var sw2 = new Stopwatch(); sw2.Start(); string readyState = ""; while (sw2.Elapsed < timeout && readyState != "complete" && readyState != "interactive") { try { readyState = doc.readyState; } catch (Exception) { browser = Browser.GetBrowser(true); } // Log.Debug("pending complete, readyState: " + doc.readyState); System.Threading.Thread.Sleep(100); } } var sw = new Stopwatch(); sw.Start(); do { elements = IESelector.GetElementsWithuiSelector(sel, from, maxresults); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } if (elements.Length < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } context.SetValue(Elements, elements); IEnumerator <IEElement> _enum = elements.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }