Autor Téma: z WinForm aplikace vyplnovat webove textboxy  (Přečteno 12939 krát)

Offline erdt.martin

  • Příspěvků: 35
  • Karma: 0
z WinForm aplikace vyplnovat webove textboxy
« kdy: 16-07-2012, 00:53:31 »
Ahoj,

mam takovy dotaz, rad bych si udelal aplikaci na odesilani sms pres jednu webovou stranku. Potrebuji tedy nejak po kliknuti na tlacitko v me aplikaci "Odeslat" aby se nejak vyplnily ty kolonky na webu a pak se samo kliklo na webove tlacitko odeslat...
Jak to udelat?
Pokud mozno, nejaky konkretni priklad pro vyplneni a odeslani pro toto:

<input type="tel" id="sms_sender" name="sms_sender" value="+420123456789" class="text" title="číslo odesílatele" />

<input type="submit" id="sms_send" value="Odeslat" class="submit" />

a prosim vazne trosku podrobneji, nikdy jsme s timto nepracoval, tak bych to rad trosku pochopil... dekuji


Offline TC

  • Příspěvků: 20
  • Karma: 1
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #1 kdy: 16-07-2012, 08:18:21 »
Kód: C++ [Vybrat]
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Text.RegularExpressions;
  10. using Zeptomoby.OrbitTools;
  11. using DynamicListViewPlus;
  12.  
  13. namespace NORADiator
  14. {
  15.     public partial class FormNoradiator : Form
  16.     {
  17.         enum Stage { Undefined, Login, Home, Search, NameQuery, RecentPositions, Ascii };
  18.         Stage prevStage = Stage.Undefined;
  19.         public FormNoradiator()
  20.         {
  21.             InitializeComponent();
  22.             Text = "Quick and Dirty NORAD";
  23.             webBrowser1.Navigate("http://www.space-track.org/perl/login.pl");
  24.             webBrowser1.DocumentCompleted += delegate
  25.             {
  26.                 var stage = GetStage(webBrowser1.DocumentText);
  27.                 switch (stage)
  28.                 {
  29.                     case Stage.Login:
  30.                         statusStrip1.Text = "Login";
  31.                         webBrowser1.Document.All["username"].InnerText = "***";
  32.                         webBrowser1.Document.All["password"].InnerText = "***";
  33.                         webBrowser1.Document.All["_submit"].InvokeMember("Click");
  34.                         break;
  35.                     case Stage.Home: toolStripStatusLabel1.Text = "Home page: Select action either from menu or using links"; break;
  36.                     case Stage.Search: toolStripStatusLabel1.Text = "Search for satellite ID"; break;
  37.                     case Stage.NameQuery: toolStripStatusLabel1.Text = "You may copy desired Catalog number on clipboard and select \"Recent Positions\""; break;
  38.                     case Stage.RecentPositions:
  39.                         toolStripStatusLabel1.Text = "Specify Epoch and Submit";
  40.                         if (prevStage != Stage.Ascii)
  41.                         {
  42.                             int id;
  43.                             if (int.TryParse(Clipboard.GetText(), out id))
  44.                                 webBrowser1.Document.All["ids"].InnerText = id.ToString();
  45.                         }
  46.                         webBrowser1.Document.All["timeframe"].SetAttribute("checked", "timespan");
  47.                         webBrowser1.Document.All["common_name"].SetAttribute("checked", "true");
  48.                         webBrowser1.Document.All["ascii"].SetAttribute("checked", "checked");
  49.                         break;
  50.                     case Stage.Ascii:
  51.                         var str = Regex.Split(webBrowser1.DocumentText, @"[\r\n]+");
  52.                         var data = new List<TleWrap>();
  53.                         int i;
  54.                         for (i = 0; i < str.Length && !str[i].Contains("<pre>"); i++) ;
  55.                         for (i++; i < str.Length; i += 3)
  56.                         {
  57.                             try
  58.                             {
  59.                                 var t = new TleWrap(str, i);
  60.                                 data.Add(t);
  61.                             }
  62.                             catch
  63.                             {
  64.                             }
  65.                         }
  66.                         if (data.Count > 0)
  67.                         {
  68.                             var frm = new Form();
  69.                             frm.Size = new Size(400, 800);
  70.                             frm.Text = data[0].sat;
  71.                             ListViewPlus.Grid<TleWrap>(frm, new ListClassData<TleWrap>(data), "sat", "epoch", "lon","incl");
  72.                             frm.Owner = this;
  73.                             frm.Show();
  74.                         }
  75.                         webBrowser1.GoBack();
  76.                         break;
  77.                     default: statusStrip1.Text = "Application is in a non-specific state"; break;
  78.                 }
  79.                 prevStage = stage;
  80.             };
  81.             homeToolStripMenuItem.Click += delegate { webBrowser1.Navigate("http://www.space-track.org/perl/home.pl"); };
  82.             searchToolStripMenuItem.Click += delegate { webBrowser1.Navigate("http://www.space-track.org/perl/name_query.pl"); };
  83.             recentPositionsToolStripMenuItem.Click += delegate { webBrowser1.Navigate("http://www.space-track.org/perl/id_query.pl"); };
  84.         }
  85.         Stage GetStage(string text)
  86.         {
  87.             if (text.Contains("<title>Space-Track - Login</title>")) return Stage.Login;
  88.             if (text.Contains("<h2>Welcome to Space-Track tcesky</h2>")) return Stage.Home;
  89.             if (text.Contains("<title>Space-Track - Satellite Common Name Query</title>")) return Stage.Search;
  90.             if (text.Contains("<title>Space-Track - Common Name Query Results</title>")) return Stage.NameQuery;
  91.             if (text.Contains("<title>Space-Track - Satellite Catalog Number Query</title>")) return Stage.RecentPositions;
  92.             if (text.Contains("<pre>") && !text.Contains("<title>") && !text.Contains("<head>")) return Stage.Ascii;
  93.             return Stage.Undefined;
  94.         }
  95.     }
  96.     public class TleWrap
  97.     {
  98.         TleItem z_itm;
  99.         [DisplayName("Satellite"), Description("Norad name of the satellite"), DisplayFormatAttribute("", 100, HorizontalAlignment.Left)]
  100.         public string sat { get { return z_itm.Name; } }
  101.         [DisplayName("Epoch"), Description("Epoch of the record"), DisplayFormatAttribute("dd.MM.yyyy HH:mm:ss", 150, HorizontalAlignment.Center)]
  102.         public DateTime epoch { get { return z_itm.noradDate; } }
  103.         [DisplayName("Lon"), Description("Longitude at the Epoch"), DisplayFormatAttribute("0.00", 80, HorizontalAlignment.Right)]
  104.         public double lon { get { return z_itm.lon_at_epoch > 180 ? z_itm.lon_at_epoch - 360 : z_itm.lon_at_epoch; } }
  105.         [DisplayName("Inclination"), Description("Inclination at the Epoch"), DisplayFormatAttribute("0.00", 80, HorizontalAlignment.Right)]
  106.         public double incl { get { return z_itm.InclinationDegree; } }
  107.         public TleWrap() { z_itm = null; }
  108.         public TleWrap(string[] line, int ind) { z_itm = new TleItem(line[ind], line[ind + 1], line[ind + 2]); }
  109.     }
  110. }
  111.  

Nyní jenom nezbývá než doufat, že slunéčko naše jasné, moderátor tohoto fóra,  nejvyšší osvícenost hlavní moderátor, a jeho všemocnost majitel fóra budou příznivě naloženi. Dojdou-li totiž k názoru, že publikovaná odpoveď je lepší než na jakou by se zmohlo slunéčko naše jasné moderátor tohoto fóra, nebo se nejvyšší osvícenost hlavní moderátor bude cítit ohrožen na mravnosti nestandardním slovem a nebo jeho všemocnost majitel fóra nebude spokojena s percepcí jeho fóra, tak ten příspěvek smažou.


Zdravim

TC
« Poslední změna: 16-07-2012, 11:04:56 od TC »

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #2 kdy: 16-07-2012, 08:30:56 »
nebo to lze udělat obecně, že si najdeš skript, který zpracovává formulář a zavoláš ho s vyplněnými parametry. Vyvolář URL jako např. http://sms.vodafone.cz/odeslatsmsm.php?cislo=608xxxxxx&text=nazdar

Nemusí to fungovat na každý formulář, ale většinou to jede.

Offline TC

  • Příspěvků: 20
  • Karma: 1
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #3 kdy: 16-07-2012, 08:56:15 »
nebo to lze udělat obecně, že si najdeš skript, který zpracovává formulář a zavoláš ho s vyplněnými parametry. Vyvolář URL jako např. http://sms.vodafone.cz/odeslatsmsm.php?cislo=608xxxxxx&text=nazdar

Nemusí to fungovat na každý formulář, ale většinou to jede.

Tazatel chtel vyplnit a odeslat, ne jenom odeslat.

Zdravim

TC


Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3554
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #4 kdy: 16-07-2012, 09:48:01 »
Tazatel chtel vyplnit a odeslat, ne jenom odeslat.

Tazatel možná nevěděl, že to jde udělat i jinak, tj. poslat přímo jen odkaz.

Embarcadero MVP - Czech republic

Offline Mi.Chal.

  • Moderátoři
  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #5 kdy: 16-07-2012, 09:53:34 »
Nemusí to fungovat na každý formulář, ale většinou to jede.

většinou bych neřekl, dost formulářů bere akorát POST.

A u .Net (aspx) je to ještě trochu složitější, tam je potřeba stáhnout původní formulář a v odpovědi poslat jeho __EVENTVALIDATION a __VIEWSTATE, jinak to taky nemusí fungovat.

Offline TC

  • Příspěvků: 20
  • Karma: 1
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #6 kdy: 16-07-2012, 12:31:12 »

Tazatel možná nevěděl, že to jde udělat i jinak, tj. poslat přímo jen odkaz.

Vsechno jde udelat i jinak. Tazatel ktery neni schopen zeptat na to co potrebuje ale pta se na to, jak realizovat sve predstavy o reseni, si obecnou odpoved nezaslouzi. Divim se, ze to apostol nevi.

Zdravim

TC


Offline erdt.martin

  • Příspěvků: 35
  • Karma: 0
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #7 kdy: 18-07-2012, 23:19:19 »
Uplne se v tom nejak ztracim...

Dobre, chtel bych tedy z www.esemes.cz odesilat zpravy pomoci aplikace... Nejake navrhy na reseni?

Offline vojtech.vitasek

  • Příspěvků: 6
  • Karma: 0
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #8 kdy: 19-07-2012, 06:43:23 »
Pro O2 stačí posílat zprávy na mail adresu 00420XXXXXXXXX@sms.eurotel.cz třeba pomocí synapse přes SMTP server.

U ostatních operátorů to bude asi podobně.  :)

Offline Mi.Chal.

  • Moderátoři
  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:z WinForm aplikace vyplnovat webove textboxy
« Odpověď #9 kdy: 19-07-2012, 07:57:04 »
Dobre, chtel bych tedy z www.esemes.cz odesilat zpravy pomoci aplikace... Nejake navrhy na reseni?

Podle vzhledu tipuji, že to řeší asynchronně přes JS, takže si budeš muset v té stránce dohledat, co posílají. Klasický post to nejspíš nebude.

Ale je otázka, jestli má tohle smysl - až se ta služba trochu rozšíří, tak to lidi začnou zneužívat, takže buď to bude neustále přetížené nebo tam zavedou třeba CAPTCHu a časové limity mezi odesláním zpráv. Pak ti ten automatický systém přestane fungovat.