Проблема HTML / Активировать через Powershell - PullRequest
0 голосов
/ 18 октября 2018

Я чувствую, что бремя задавать так много вопросов, но я также знаю, что вы не будете здесь читать это, если это поможет другому программисту понять и решить проблемы:)

Итак, яЯ пытаюсь сделать простую кнопку, которая позволяет пользователю перейти на веб-сайт, войти в систему, перейти к управлению временем и нажать кнопку «Отметить время записи».По сути, кнопка входа / выключения одним щелчком мыши.

Проблема в том, что этот веб-сайт не позволяет мне автоматически заполнять поля имени пользователя и пароля И позволяет программе нажимать кнопку «Вход».См. Код ниже:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

$Form_Login                    = New-Object system.Windows.Forms.Form
$Form_Login.ClientSize         = '200,165'
$Form_Login.text               = "Login/Logout"
$Form_Login.TopMost            = $false
$Form_Login.StartPosition      = 'CenterScreen'

$label_Login                   = New-Object system.Windows.Forms.Label
$label_Login.text              = "Click to login/logout"
$label_Login.AutoSize          = $true
$label_Login.width             = 25
$label_Login.height            = 10
$label_Login.location          = New-Object System.Drawing.Point(40,10)
$label_Login.Font              = 'Microsoft Sans Serif,10'
$label_Login.ForeColor         = "#000000"

$Button_Login                  = New-Object system.Windows.Forms.Button
$Button_Login.text             = "Login/Logout"
$Button_Login.width            = 180
$Button_Login.height           = 125
$Button_Login.location         = New-Object System.Drawing.Point(10,30)
$Button_Login.Font             = 'Microsoft Sans Serif,10'

$Form_Login.controls.AddRange(@($label_Login,$Button_Login))

$Button_Login.Add_Click({

    $ie = New-Object -ComObject 'internetExplorer.Application'
    $ie.Visible= $true # Make it visible

    $username="username"

    $password="password"

    $ie.Navigate("https://workforcenow.adp.com/workforcenow/login")

    While ($ie.Busy -eq $true) {Start-Sleep -Seconds 3;}

    $usernamefield = $ie.document.getElementByID('user_id')
    $usernamefield.value = "$username"

    $passwordfield = $ie.document.getElementByID('password')
    $passwordfield.value = "$password"

    $Link = $ie.document.getElementByID('subBtn')
    $Link.click()

})

[void]$Form_Login.ShowDialog()

Итак, когда я запускаю скрипт, он заполняет поля, но кнопка отображается серым цветом.Чего мне не хватает?Что-то в HTML-коде?

Спасибо, ребята!Хорошего дня!

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Давайте поговорим о HTML

Внутри мы видим несколько вещей

<button disabled="" class="btn btn-primary ng-scope" id="subBtn" type="submit" data-ng-click="saveUserID()" translate="signin.signin">Sign In</button>

Мы могли бы отправить форму как

$Form = $passwordfield.Form
$Form.Submit()

Но мы видим внутриКнопка ng-click="saveUserID()", которая указывает на некоторую обработку JavaScript, которая происходит с публикацией перед отправкой формы, что означает, что мы должны нажать на эту кнопку.На кнопке мы видим disabled="", который является атрибутом, используемым, чтобы сделать кнопку не щелкаемой.Так что все, что нам нужно сделать, это удалить этот атрибут.

$Link = $ie.document.getElementByID('subBtn')
$Link.removeAttribute("disabled");
$Link.click()

Это отправит форму.

0 голосов
/ 18 октября 2018

Вы можете вручную запустить событие OnKeyUp, например так:

$usernamefield.FireEvent('onKeyUp')
$passwordfield.FireEvent('onKeyUp')
#Side note, the equal length variable names here are just...*chef's kiss*

Возможно, вам придется открыть страницу в инструментах Chrome Dev и посмотреть на JavaScript для сайта, чтобы убедиться, что это событие, которое ониСлежу.Они могут ждать, пока один или оба из них отправят ключ, или вместо этого подождать, когда наведется указатель мыши на кнопку «Отправить».

Или, может быть, кнопка должна быть включена сама?

В любом случае, вы должны начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...