Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2017, 13:31   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Открытие ссылки в браузере

Здравствуйте.
Сегодня мне понадобилось следующее:
1) программно (по расписанию) открывать ссылки в браузере по умолчанию; с этим проблем нет
Код:
Process testing=Process.Start("http://mail.ru");
Проблема дальше - в переменную testing я ничего не получаю (null), поэтому моя проблема со вторым пунктом:
2) через время нужно закрыть открытую ссылку.

Браузер используется Opera || Сhrome, так что на одну вкладку один процесс; я начал копать в эту сторону - в списке процессов не нашёл никакой информации, за которую можно зацепиться - тот же MainWindowTitle у всех пустой, кроме Экспресс-панели.
Подумал можно ли указать в ProcessStartInfo какой либо флаг, за который я смогу зацепиться при поиске процесса;
но оказалось, что то нельзя изменить (это норма, например указать несуществующий UserName, перенаправить потоки ввода/вывода) - вызывает ошибку на старте процесса;
что то в итоге всё равно становится стандартным/пустым (например Arguments, CreateNoWindow).

Подумал, может можно указать приоритет процесса до его старта - не нашёл такого параметра в ProcessStartInfo.

Что посоветуете ? через время нужно закрыть открытую ссылку
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 31.01.2017, 13:42   #2
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Можно конечно по времени запуска процесса, но этот блин слишком не точно, потому что у меня нет запущенного процесса, и исходить можно только из тех цифр, которые есть у меня в программе.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 31.01.2017, 13:49   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
через время нужно закрыть открытую ссылку
Если браузер любой, а не какой-то определенный, то вряд ли это возможно.

А цель-то какая? Зачем это?
Вообще для автоматизации браузера проще использовать что-нибудь типа Selenium (WebDriver).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.01.2017, 13:52   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А цель-то какая? Зачем это?
Задача - по расписанию посещать ссылки, открывая их примерно раз в 5-10 минут ... Если я не буду убивать вкладку - это будет минимум некрасиво, да и не удобно.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 31.01.2017, 13:54   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Selenium для такого проще всего.

А владелец компа знает об этом?
И что за ссылки такие? Накручивание просмотров что ли?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.01.2017, 14:04   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Alex11223, это мне надо; суть - дистанционное обучение на сайте; автоматизировать посещаемость. Браузер по умолчанию потому что нужны куки, ибо авторизация.
Я смог добиться определённых результатов по времени запуска процесса плюс-минус две секунды - и я нашёл нужный мне процесс; это конечно не идеально, но уже что то.
Код:
private void StartLink(string link)
{
	long inner_time;
	Process testing=Process.Start(link);
	Thread.Sleep(10000);
	Process[] list=Process.GetProcesses();
	for (int i=0;i<list.Length;i++)
	{
		if (list[i].ProcessName=="opera" || list[i].ProcessName=="chrome")
		{
			inner_time=DateTime.Now.Ticks/10000-list[i].StartTime.Ticks/10000;
			// File.AppendAllText("info.txt",inner_time.ToString()+"\r\n"); // отладочная инфа
			if (inner_time>7000 && inner_time<12000)
				list[i].Kill();
			else {}
		} else {}
	}
}
Но при вызове Kill() вкладка не закрывается, а просто "Сбой загрузки страницы", хотя страница уже была загружена.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 31.01.2017, 14:08   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Странное какое-то обучение оО

Я ж сказал уже 2 раза, возьмите Selenium и не занимайтесь фигней с процессами.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.01.2017, 14:14   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Странное какое-то обучение оО
Суть не в обучении, а в том, что ты (то есть я) должен быть по расписанию на странице, как на парах. То есть, отсидеть 80 минут на странице, и через 15 минут без обновления страницы посетитель "покидает пару". А за этим следит заведующий кафедрой. Для чего всё это - я не знаю.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 31.01.2017, 14:16   #9
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Alex11223, можете пожалуйста вкратце описать Selenium ? Позволит ли он мне реализовать задуманное ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 31.01.2017, 14:28   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Это библиотека для управления любыми браузерами (для которых есть WebDriver. Chrome, FF, IE, Edge, ...)

Код:
using (var webDriver = new ChromeDriver())
{
    webDriver.Url = "...";

    Thread.Sleep(100000);
}
(вместо закрытия и переоткрытия конечно можно и просто обновить)

Если нужна авторизация, то можно либо им же и вбить логин/пароль, либо создать отдельный профиль (для хрома просто параметр --user-data-dir с путем папки добавить), в нем войти и его всегда использовать (может быть можно указать и путь стандартного профиля из AppData\.....).
Код:
        RemoteWebDriver CreateWebDriver(string profileDirPath)
        {
            var options = new ChromeOptions();
            options.AddArguments("--user-data-dir=" + profileDirPath);

            return new ChromeDriver(options);
        }
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 31.01.2017 в 14:34.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылки в браузере - действие в программе? KoBaL Общие вопросы Delphi 10 06.12.2013 12:55
Поиск и открытие txt в браузере vaneeeek Общие вопросы C/C++ 8 17.08.2012 17:15
Поиск и открытие txt в браузере(C++) vaneeeek Помощь студентам 2 17.08.2012 15:19
ОТкрытие страницы в браузере по умолчанию ВалекFCRK Общие вопросы Delphi 7 21.06.2012 23:21
Как задать открытие файла в браузере? da487 HTML и CSS 2 20.04.2011 15:55