Что нового

[Окна, Диалоги] Изменения свойства пользователя на сайте

ZanMax

Тестер
Сообщения
120
Репутация
5
Всем привет.
Возникла необходимость в написание программы которая будет деактивировать пользователей на сайте.
Проблема в том что лицензий меньше чем реальных пользователей и нужно деативировать старых для того что бы дать доступ новым. Вручную это делать сложно.
Хочу попросить вашей помощи.
Вот так выглядит список пользователей:
lic_norm.png

Нужно взять дату и время последней авторизации и если она больше чем 2 - 3 часа просто деативировать пользователя.
lic_norm_2.png


Очень прошу помогите. :(
Что от меня нужно ? какие ИД элементов или еще что-то.
 

BIOS

Жизнь - игра. График - супер, но сюжет - хреновый.
Сообщения
173
Репутация
69
Исходный код данной страницы
 
Автор
Z

ZanMax

Тестер
Сообщения
120
Репутация
5
Вот код станички:
https://sites.google.com/site/zanogamaxim/files/portal.rar?attredirects=0&d=1

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

Спасибо огромное.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Уважаемый, а работать напрямую с БД разве не лучше будет?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ZanMax,
Попробуйте так. У меня с Вашими файлами работает.
Код:
#include <IE.au3>
#include <Date.au3>
;======================
;!!! проверял только на IE8 !!!
;======================
$sUrl = @ScriptDir & '\portal - Список пользователей.htm';на ссылку поменяйте
$iError = 1
$iMaxHOUR = 7 ; сколько часов
$fDeActive = False
$oIE = _IECreate($sUrl)
If @error Then
	MsgBox(16, 'Error', '_IECreate')
	Exit
EndIf
For $i = 1 To 1
	$oForm = _IEGetObjById($oIE, 'form_tbl_user')
	If @error Then ExitLoop
	$oTRs = _IETagNameGetCollection($oForm, 'tr')
	If @error Then ExitLoop
	For $oTR In $oTRs
		If StringRegExp($oTR.classname, '(even|odd)') Then
			If StringInStr($oTR.innertext, 'admin') Then ContinueLoop; если admin`a убирать тоже, то эту строку уберите
			$oTime = _IETagNameGetCollection($oTR, 'td', 9) ;9 - Последняя авторизация; 5 - Дата изменения
			If @error Then ExitLoop 2
			$sDate = StringRegExpReplace($oTime.innertext, '^(\d{1,2})\.(\d{1,2})\.(\d{4})(.*)$', '$3/$2/$1$4')
			If @extended <> 4 Then ContinueLoop
			$iDiff = _DateDiff('h', $sDate, _NowCalc())
			If @error Then ContinueLoop
			If $iDiff >= $iMaxHOUR Then
				$oChB = _IETagNameGetCollection($oTR, 'input', 0)
				If @error Then ExitLoop 2
				_IEAction($oChB, 'click')
				If @error Then ExitLoop 2
				$fDeActive = True
			EndIf
		EndIf
	Next
	If $fDeActive Then
		$oSelect = _IEFormElementGetObjByName($oForm, 'action')
		If @error Then ExitLoop
		_IEFormElementOptionSelect($oSelect, 'deactivate')
		If @error Then ExitLoop
		$oButton = _IEGetObjById($oForm, 'action_edit_button')
		If @error Then ExitLoop
		_IEAction($oButton, 'click')
		If @error Then ExitLoop
		_IELoadWait($oIE)
		If @error Then ExitLoop
	EndIf
	$iError = 0
Next
If $iError Then
	MsgBox(16, 'Error', 'Error')
	_IEQuit($oIE)
Else
	MsgBox(64, 'Info', 'OK')
	_IEQuit($oIE)
EndIf
 
Автор
Z

ZanMax

Тестер
Сообщения
120
Репутация
5
Огромное спасибо. Код заработал с поправкой:
Код:
$oButton = _IEGetObjById($oForm, 'action_edit_button')
заменил на:
Код:
$oButton = _IEGetObjByName($oForm,'apply')
Так как в прежнем варианте оно просто редактировало.
Ребята я очень вам благодарен. :smile:

По поводу БД - я так и планирую сделать. Но пока нет доступа к БД и решение нужно было сделать срочно.
:IL_AutoIt_1:
 
Верх