2013-08-06 2 views
0

Я пытаюсь заполнить свое имя пользователя и пароль на определенной веб-странице, а затем нажать кнопку «Войти» , все автоматически через Powershell.Powershell: Как нажимать кнопку на веб-странице, если вы не знаете кнопку ID

Проблема в том, что я не могу найти идентификатор кнопки входа в исходный код html.

Я пытался использовать команду:

$link = $ie.Document.getElementsByTagName('A') | where-object {$_.innerText -match 'sign in'} 

, но это не работало ни.

Любые мысли, которые команда PS использовать, если я хочу нажать кнопку входа в систему?

HTML-код выглядит следующим образом:

<div class="login"> 
    <div class="content"> 
     <div class="subsection-1">Sign in or create a <a id="ctl00_HeaderUserControl_LoginUserControl_hypNewAccount" href="/authentication/registerprovider.aspx?">new account</a></div> 
     <div class="subsection-2"> 
      <span class="navy bold">What is your email address?</span> 
      <div class="indent"> 
       <span class="bold">Email:</span> 
       <input id="loginEmail" class="text-box" type="text" maxlength="100" tabindex="1" /> 
       <img class="ajax-loader" src="/content/images/research/global/transparent.gif" alt="" /> 
      </div> 
      <div class="invalid-email"></div> 
     </div> 
     <div class="subsection-3"> 
      <span class="navy bold">Do you know your password?</span> 
      <div> 
       <input id="passwordNotKnown" name="passwordSwitch" type="radio" checked="checked" /> 
       <label for="noPassword">No, I don't know my password or I'm new .</label> 
      </div> 
      <div> 
       <input id="passwordKnown" name="passwordSwitch" type="radio" /> 
       <label for="noPassword">Yes, my password is:</label> 
       <input id="loginPassword" class="text-box" type="password" maxlength="50" tabindex="2" /> 
      </div> 
      <div class="invalid-password"></div> 
      <div class="error"></div> 
     </div> 
     <div class="subsection-4"> 
      <button type="button" class="login-button greenButton" tabindex="4">Sign in</button> 
      <a href="javascript:void(0);" class="cancel-link">Cancel</a> 
      <input id="stayLoggedIn" type="checkbox" tabindex="3" /> 
      <label for="stayLoggedIn">Stay signed in</label> 
     </div> 
    </div> 
    <div class="reset-password"> 
     <div class="subsection-1">Would you like to reset your password?</div> 
     <div class="subsection-2">Choosing <span class="bold">yes</span> will reset your password and email a temporary password to: <span class="repeat-email"></span></div> 
     <div class="subsection-3"> 
      <div class="center"> 
       <button class="reset-password-button" type="button">Yes</button> 
       <button class="do-not-reset-password-button" type="button">No</button> 
      </div> 
     </div> 
    </div> 
</div> 
+0

Кнопка входа в систему не является тегом 'A', это кнопка:' ' –

+0

Вы пытаетесь чтобы обойти страницу входа в систему OpenID или поставщика OAuth? Если вы находитесь, и вы обнаружили, что поставщик API, который вы используете, скорее всего, ваш ключ API будет отменен. –

ответ

2

Как @ Джейми-Тейлор упомянул кнопку Войти фактически кнопку.

Вы можете получить к нему доступ не только по идентификатору, но и по имени класса, используя document.documentElement.getElementsByClassName. Обратите внимание, что эта функция вернет список элементов, так как более одного элемента на странице могут иметь один и тот же класс.

EDIT Я был неправ: для того, чтобы иметь getElementsByClassName вы должны вызвать его на document.documentElement вместо document

+0

Здравствуйте, спасибо за советы. Наверное, я должен сказать, что я новичок в PS и все еще изучаю основы, поэтому извиняюсь, если мой вопрос, пожалуй, простой. Я использовал getElementsByClassName: $ ie.Document.getElementsByClassName («кнопка входа в систему greenbutton»). Click(); но это приводит к следующему сообщению: Ошибка вызова метода, потому что [mshtml.HTMLDocumentClass] не содержит метода с именем getElementsByClassName. Что я делаю неправильно? – AVB

+0

Я обновил свой ответ. –

+0

спасибо, что вернулись ко мне. Это сводит меня с ума. Теперь я использую команду: $ ie.document.documentElement.getElementsByClassName ('login-button greenButton'). нажмите(). Он имеет тот же результат: «Ошибка вызова метода, потому что [mshtml.HTMLHtmlElementClass] не содержит метода с именем« getElementsByClassName »». Что я делаю не так? Буду признателен, если вы сможете мне помочь еще раз. – AVB

2

Я приехал сюда в поисках подобного ответа и выяснили, как получить это сделать. Проводятся здесь для будущих поисковиков. Как заметил Szymon, getElementsByClassName возвращает массив, и вам нужно будет выбрать нужный элемент перед щелчком. В моем случае имя_класс был button, и я смог выбрать его, используя следующий:

$submitButton = $doc.documentElement.getElementsByClassName('button') | Select-Object -First 1 
$submitButton.click() 

Это работает для меня, потому что есть только один элемент с помощью кнопки Classname, поэтому результаты моих измениться, если у вас есть больше чем одно с тем же именем. Просто измените то, что вы захватите с помощью select-object, если это необходимо.

Смежные вопросы