Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Языки программирования (http://mangos.ytdb.ru/forumdisplay.php?f=34)
-   -   DateTime & TimeSpan C# (http://mangos.ytdb.ru/showthread.php?t=6685)

partizanes 22.02.2013 09:55

DateTime & TimeSpan C#
 
Подскажите такой момент ,есть код который должен высчитывать разницу до определенного времени ,где day означает день(с 7 -23) или ночь (23-7)
суть в том что при прохождении данной функции ночью к дате должен быть добавлен 1 день например
проверка происходит 22.02.2013 23.01
значит TimeEnd (блок else) должен быть уже завтрашним днем тоесть 23.02.2013 07.01
возможно при инициализации строки
Код:

DateTime TimeEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 07, 00, 01);
указывать +1 день если проверка производиться в период с (23.00 до 23.59) ? и как оно себя поведет например 31 числа ? перепрыгнет ли на следующий месяц?

В текущей реализации разница ночью получаеться отрицательная (-16 часов ),видимо что то не правильно
Код:

        static void CheckTime(bool day)
        {
            TimeSpan diff = new TimeSpan();

            if (day)
            {
                DateTime TimeNow = DateTime.Now;
                DateTime TimeEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 00, 01);

                diff = TimeEnd - TimeNow;
            }
            else
            {
                DateTime TimeNow = DateTime.Now;
                DateTime TimeEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 07, 00, 01);

                if (TimeNow.Hour == 23)
                {
                    DateTime.Today.AddDays(1);
                }

                Console.WriteLine("Выполняю действие " + TimeEnd + "-" + TimeNow );

                diff = TimeEnd - TimeNow;
            }

        }

Спасибо.

ADD
Ошибся наверно с переменными должно быть так
Код:

                if (TimeNow.Hour == 23)
                {
                    TimeEnd.AddDays(1);
                }


Konctantin 22.02.2013 10:32

Если честно, совсем ничего не понял, для чего все это надо? и какие цели. Может ответ лежит на поверхности.

wtf?
функция должна вернуть результат
Код:

if (TimeNow.Hour == 23)
{
    TimeEnd.AddDays(1);
}

тоесть
Код:

if (TimeNow.Hour == 23)
{
    var newDate = TimeEnd.AddDays(1);
    bla bla
}


partizanes 22.02.2013 11:06

пишу службу для муз плеера которая высчитывает при проверке время до запуска или выключения плеера,производит генерацию плейлиста и тп ,проверка может проводиться в любой момент.

Часть функции я вырезал что бы не путать людей,в конце было

Код:

Thread thd = new Thread(delegate()
            {
                Console.WriteLine("Запускаю поток контролера");
                WaitTime(diff,day);
            });
            thd.Name = "Поток контроллер";
            thd.Start();

Действительно ошибся, а как насчет конца месяца,года?

я так понимаю что можно и так
Код:

TimeEnd = TimeEnd.AddDays(1);

Konctantin 22.02.2013 12:08

Код:

public static DateTime EndOfYear(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, 12, 31, 23, 59, 59);
}

public static DateTime StartOfYear(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, 1, 1);
}

public static DateTime EndOfMonth(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, 31, 23, 59, 59);
}

public static DateTime StartOfMonth(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, 1);
}

public static DateTime EndOfDay(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 23, 59, 59);
}

public static DateTime StartOfDay(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day);
}

public static DateTime StartOfWeek(this DateTime dayInWeek)
{
    var dt = dayInWeek.Date;
    while (dt.DayOfWeek != DayOfWeek.Monday)
        dt = dt.AddDays(-1);
    return new DateTime(dt.Year, dt.Month, dt.Day);
}

public static DateTime EndOfWeek(this DateTime dayInWeek)
{
    var dt = dayInWeek.Date;
    while (dt.DayOfWeek != DayOfWeek.Sunday)
        dt = dt.AddDays(1);
    return new DateTime(dt.Year, dt.Month, dt.Day, 23, 59, 59);
}


Inn04ka 23.02.2013 11:21

Решила не создавать еще одну тему
 
Всем, привет!
Программа пишется с нуля. У нас есть объект Webbrowser. Загружаю страницу, ее нужно заполнить в автоматическом режиме и кликнуть.
Код:

webBrowser1.Document.GetElementById("username").InnerText = "1";
                webBrowser1.Document.GetElementById("password").InnerText = "1";

                foreach (HtmlElement input in this.webBrowser1.Document.GetElementsByTagName("submit"))
                {
                    if (input.Id == "submit" && input.GetAttribute("value") == "Login")
                    {
                        input.InvokeMember("click");
                        break;
                    }
                }

Вопрос: как узнать ElementId?



Мне нужно ввести логин и пароль. Они подгружаются через js. Вот мне нужно узнать какой таг или elementId, как его вывести?

Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <meta http-equiv="cache-control" content="no-cache" />
                <meta http-equiv="pragma" content="no-cache" />
                <style type="text/css" media="screen">@import 'themes/elt_lite/login.css'/**/;</style>
                <script type="text/javascript">
                <!--//--><![CDATA[//><!--

function firstFocus() {
        if (document.forms.length > 0)
        {
                var f = document.forms[0];
                for (var i=0; i<f.length; i++)
                {
                        var e = f.elements[i];
                        if ((e.name) && (e.type) && ((e.type=='text') || (e.type=='textarea')) && (!e.disabled))
                        {
                                e.focus();
                                break;
                        }
                }
        }
}

                //--><!]]>
                </script>

        </head>

        <body id="login" onload="firstFocus();">
                <!-- Start #login-container -->
                <div id="login-container">

       
                <!-- redirect to splash for all cases. Set splashpage iframe src to "https://hostname/cas/login#splashpage" -->
                <script type="text/javascript">
                        var queryString = window.location.search;
                        if (window.location == window.parent.location || !queryString || queryString.indexOf("page=splashpage") < 0) {
                                var splashURL =  "http://" + window.location.hostname + "/p/splash";
                                window.open(splashURL,"_top");
                        }
                </script>
       

                <!-- Start #login-form -->
                <div id="login-form-container">
                        <form id="fm1" class="fm-v clearfix" action="/cas/login?page=splashpage&amp;target=top&amp;service=/p/cas" method="post">
                           
                       
                                <fieldset>
                                        <ol>
                                                <li>
                                                        <!--
                                                          --**Usability project change has been started
                                                          --**Label is disable because UserName is coming dynamically from Resource bundle class (message.properties)
                                                        -->
                                                        <!--<label for="username">User ID:</label>-->
                                                        <label for="username">User ID</label>       
                                                        <!--**Usability project change has been ended -->                                                                                                       
                                                       

                                                       
                                                               
                                                                <input id="username" name="username" class="required" tabindex="1" accesskey="n" type="text" value="" autocomplete="on"/>
                                                       
                                                </li>
                                                <li>
                                                        <!--
                                                          --**Usability project change started
                                                          --**Label is disable because password is coming dynamically from Resourcebundle class (message.properties)                                               
                                                        -->
                                                        <!-- <label for="password">Password:</label>-->
                                                        <label for="password">Password</label>               
                                                        <!--**Usability project change has been Ended -->                                                               
                                                       
                                                        <input id="password" name="password" class="required" tabindex="2" accesskey="p" type="password" value="" autocomplete="on"/>
                                                </li>
                                                <li class="last">
                                                        <button type="submit" name="submit" title="Login">Login</button>
                                                        <input type="hidden" name="lt" value="_тут_значение" />
                                                        <input type="hidden" name="_eventId" value="submit" />
                                                </li>
                                        </ol>
                                </fieldset>
                </form>
                </div>
                <!-- End #login-container -->
        </body>
</html>

Вот как вытащить elementId?

Konctantin 23.02.2013 13:21

ну так вот же они:<input id="password" или я что-то не так понял...

ispanec 26.02.2013 14:55

А для чего страницу заполнять?
Посмотреть метод GET/POST и формат... не?

Т.е. вы методом POST отправите username=usrname&password=pass

Inn04ka 27.02.2013 18:08

передается 3 значения: username, password и It - генерируется фреймом, поэтому пост запрос не работает

Цитата:

_cDE6009DF-1F16-1B0D-CB64-48F1FEFEC1F7_kDB1A2CB5-CF9D-37EF-7204-029348A74EA3
что-то вроде такого


Цитата:

<iframe width="100%" height="185px" frameborder="0" style="overflow:hidden;" src=/cas/login?page=splashpage&amp;target=top&amp;service=/p/cas#splashpage" id="cas_iframe" scrollbars="no"></iframe>
ссылка на фрейм такая
вообще сайт сделан для института, на нем выполняются задания по английскому языку, задания бредовые, кликаешь показать ответы и принтскрин, и начинаешь сначала. Надоело......

Добавлено через 4 минуты
Цитата:

Сообщение от ispanec (Сообщение 30683)
А для чего страницу заполнять?
Посмотреть метод GET/POST и формат... не?

Т.е. вы методом POST отправите username=usrname&password=pass

Это было изначально сделано, но не помогло....

ispanec 28.02.2013 10:25

POST будет работать если всё правильно передать.
Можно просто получить страничку, распарсить нужные параметры и передать постом.

Такое никогда не делал WebBrowse-ом, но ради интереса:
1. Есть страничка, ваша упрощённая. В экшене АСП-скрипт (ну то что на серваке было :) ).
PHP код:

<html>
    <
head>
    </
head>
    <
body id="login">
        <!--<
form id="fm1" class="fm-v clearfix" action="/cas/login?page=splashpage&amp;target=top&amp;service=/p/cas" method="post">-->
        <
form id="fm1" class="fm-v clearfix" action="http://test-srv/test/resp.asp" method="post">
            <
fieldset>
                <
ol>
                    <
li>
                        <
label for="username">User ID</label>    
                        <
input id="username" name="username" class="required" tabindex="1" accesskey="n" type="text" value="" autocomplete="on"/>            
                    </
li>
                    <
li>
                        <
label for="password">Password</label>        
                        <
input id="password" name="password" class="required" tabindex="2" accesskey="p" type="password" value="" autocomplete="on"/>
                    </
li>
                    <
li class="last">
                        <
button type="submit" name="submit" title="Login">Login</button>
                        <
input type="hidden" name="lt" value="TEST-TEST-TEST" />
                        <
input type="hidden" name="_eventId" value="submit" />
                    </
li>
                </
ol>
            </
fieldset>
        </
form>
    </
body>
<
html

2. Получаем эту страничку и кликаем:
PHP код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 
WindowsFormsApplication1
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void Form1_Load(object senderEventArgs e)
        {
            
webBrowser1.Navigate("http://test-srv/test/test.html");

            while (
webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
                
Application.DoEvents();
            }

            
webBrowser1.Document.GetElementById("username").InnerText "t_login";
            
webBrowser1.Document.GetElementById("password").InnerText "t_pass";

            foreach (
HtmlElement he in webBrowser1.Document.All)
            {
                if (
he.GetAttribute("type") == "submit")
                {
                    
he.InvokeMember("click");
                }
            }
        }
    }


И как бы клик и переход есть.
http://ipic.su/img/img7/fs/123.1362036247.png

АСП-скрипт такой:
PHP код:

<html xmlns="http://www.w3.org/1999/xhtml" >
<
head>
    <
title>Page</title>
</
head>
<
body>
    
    <% 
response.write("username=" Request("username") & " password=" Request("password") & " lt=" Request("lt"))%>
    
</
body>
</
html


Inn04ka 11.04.2013 10:35

Продолжаю танцы с бубном...... безуспешно :(
Разработчики сайта назвали это переменной http://klikr.org/ead5a259b5fb1db3b3893fd119ab.png
сайт: http://www.cambridgelms.org/
Нужно научить программку вводить логин и пароль в форму и кликать login.
Очень прошу помочь в решение! Заранее спасибо!

Inn04ka 12.04.2013 12:21

Цитата:

while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
var frame = webBrowser1.Document.Window.Frames["cas_iframe"];
var login = frame.Document.GetElementById("username");
var passwd = frame.Document.GetElementById("password");
login.Focus();
login.InnerText = txtLogin.Text;
passwd.Focus();
passwd.InnerText = txtPassword.Text;
SendKeys.Send("{ENTER}");
/*if ((webBrowser1.Url != null) && (webBrowser1.Url.AbsoluteUri != "https://www.cambridgelms.org/p/splash/"))
{
webBrowser1.Dispose();
General.LoginOk = true;
Close();
}
else
{
MessageBox.Show(@"Incorrect login or password!");
}*/
Суть проблемы: если исполнять код, который закоментирован, то кнопка не нажмется. Если убрать то все работает.

Evgeniy 12.04.2013 12:40

Цитата:

Сообщение от Inn04ka (Сообщение 31160)
Суть проблемы: если исполнять код, который закоментирован, то кнопка не нажмется. Если убрать то все работает.

Подозрения на:
задержки нехватает между сообщением "Ентер" и проверкой на урл. В итоге webBrowser1.Dispose(); и ничего ест-но не происходит.

Код:

HtmlElement form = webBrowser1.Document.GetElementById("fm1");
if (form != null)
    form.InvokeMember("submit");


Inn04ka 12.04.2013 12:53

Цитата:

Сообщение от Evgeniy (Сообщение 31161)
Подозрения на:
задержки нехватает между сообщением "Ентер" и проверкой на урл. В итоге webBrowser1.Dispose(); и ничего ест-но не происходит.

Код:

HtmlElement form = webBrowser1.Document.GetElementById("fm1");
if (form != null)
    form.InvokeMember("submit");


Спасибо, буду пробовать

Inn04ka 12.04.2013 13:01

К сожалению, не помогло. Не выдается диалог окно.

Inn04ka 12.04.2013 13:14

В этом все решение задачки.
Цитата:

SendKeys.Send("{ENTER}");
Меняем на:
Цитата:

SendKeys.SendWait("{ENTER}");
http://klikr.org/ca0b138c4f32218feb5abd929379.png

Inn04ka 12.04.2013 13:41

Нефига не справилась...... Авторизация проходит, но считает, что пароль неверный. Как исправить?

Evgeniy 12.04.2013 13:45

Цитата:

Сообщение от Inn04ka (Сообщение 31165)
Нефига не справилась...... Авторизация проходит, но считает, что пароль неверный. Как исправить?

проверить, что отправляет...каким юзер агентом ,какие куки, какие скрытые поля есть, все ли передается, если по пути редирект и т.п.

Inn04ka 12.04.2013 14:29

Цитата:

Сообщение от Evgeniy (Сообщение 31166)
проверить, что отправляет...каким юзер агентом ,какие куки, какие скрытые поля есть, все ли передается, если по пути редирект и т.п.


как запустить поток, точнее выполнить его до определенной точки?
Application.DoEvents();

Evgeniy 12.04.2013 14:37

Цитата:

Сообщение от Inn04ka (Сообщение 31167)
как запустить поток, точнее выполнить его до определенной точки?
Application.DoEvents();

До определенной точки на с# без понятия...обычно делается в дебагере либо с помощью какого то флага ставится ожидание - псевдокод
Код:

while(flag=true)
 Thread.sleep(1000);
  // check some data
 if( bla bla){
  flag = false;
 }
}
//resume work



Текущее время: 10:31. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS