Заполните два поля ввода на веб-странице - PullRequest
0 голосов
/ 21 октября 2018

Я написал скрипт на VBA в сочетании с IE, чтобы заполнить два поля ввода для входа на веб-страницу.

Когда я пытаюсь выполнить свой скрипт, он выдает Access is denied ошибка из-за iframe, в пределах которого находятся поля ввода.Как я могу заполнить два поля ввода своими учетными данными?

Это ссылка на сайт

Это моя попытка:

Sub LogIn()
    Const Url = "replace with above link"
    Dim IE As New InternetExplorer, HTML As HTMLDocument
    Dim frm As Object, post As Object

    With IE
        .Visible = True
        .navigate Url
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set HTML = .document
    End With

    Application.Wait Now + TimeValue("00:00:05")

    Set frm = HTML.querySelector("iframe[name='disneyid-iframe']").contentWindow.document
    Set post = frm.querySelector("input[placeholder='Username or Email Address']")
    post.Value = "somename@gmailmail.com"
End Sub

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

HTML-элементы, связанные с iframe содержимым:

<iframe id="disneyid-secure-responder" name="disneyid-secure-responder" src="https://www.espn.com/disneyid/responder/index.html?clientId=ESPN-ONESITE.WEB-PROD&amp;scheme=http&amp;postMessageOrigin=http%3A%2F%2Ffantasy.espn.com%2Fbasketball%2Fteam%3FleagueId%3D24874190%26teamId%3D1%26statSplit%3DcurrSeason&amp;cookieDomain=espn.com&amp;config=PROD&amp;logLevel=INFO&amp;topHost=fantasy.espn.com&amp;ageBand=ADULT&amp;countryCode=CA&amp;langPref=en-US&amp;cssOverride=https%3A%2F%2Fsecure.espncdn.com%2Fcombiner%2Fc%3Fcss%3Ddisneyid%2Fcore.css%2Cdisneyid%2Ffantasy.css&amp;responderPage=https%3A%2F%2Fwww.espn.com%2Fdisneyid%2Fresponder%2Findex.html&amp;buildId=165f40c7564" style="display: none;"></iframe>

Ответы [ 3 ]

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

Как упоминалось в другом ответе, iframe src находится в другом домене, и та же политика домена в этом случае фактически исключает IE для> версии 8.Хотя возиться с настройками безопасности, пытаясь обойти это, - плохая идея, см. this для чтения.

Это достаточно просто с selenium basic для VBA, использующей Chrome.Вам также необходимо выполнить цикл, пока не будут введены данные для входаЯ добавляю таймаут, чтобы предотвратить бесконечный цикл.

После установки selenium вам нужно перейти в VBE> Инструменты> Ссылки и добавить ссылку на Selenium Type Library.

Option Explicit    
Public Sub Login()
    Dim d As WebDriver, ele As WebElement, t As Date
    Const MAX_WAIT_SEC As Long = 5
    Const url = "http://fantasy.espn.com/basketball/team?leagueId=24874190&teamId=1&statSplit=currSeason"
    Set d = New ChromeDriver

    With d
        .Start "Chrome"
        .get url
        t = Timer
        Do
            DoEvents
            On Error Resume Next
            .SwitchToFrame .FindElementById("disneyid-iframe")
            Set ele = .FindElementByCss("[type=email]")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While Not ele.IsDisplayed

        If ele Is Nothing Then Exit Sub

        ele.SendKeys "Bob@Builder.com"
        .FindElementByCss("[type=password]").SendKeys "password"
        .FindElementByCss("[type=submit]").Click

        Stop                                     '<== Delete me later
        'Other code
        .Quit
    End With
End Sub
0 голосов
/ 22 октября 2018

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

Основной код HTML-страницы (demo51.html):

<!DOCTYPE html>
<html>
<body>
<H2>This is main page...</h2><br>
<iframe src="C:\Users\Administrator\Desktop\demo52.html" id="ifrm" height="300px" width="300px">
  <p>Your browser does not support iframes.</p>
</iframe>

</body>
</html>

Страница, которая будет отображаться на главной странице Iframe (demo52.html).

<!DOCTYPE html>
<html>
<body>
<h2> Sample Page</h2><br>
Name: <input type="text" id="txt_name" value=""><br><br>
Age: &nbsp &nbsp<input type="text" id="txt_age" value=""><br><br>
&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp <input type="submit" value="submit">
</body>
</html>

Код VBA:

Public Sub demo()

Dim baseURL As String
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim workFrame As HTMLIFrame
Dim acctInput As HTMLInputElement

baseURL = "C:\Users\Administrator\Desktop\demo51.html"

Set IE = New InternetExplorer

With IE
.Visible = True



.Navigate baseURL
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend



Set workFrame = .Document.getElementById("ifrm")
Set HTMLdoc = workFrame.contentWindow.Document
End With

Set acctInput = HTMLdoc.getElementById("txt_name")
acctInput.Focus
acctInput.Value = "abcde"

Set acctInput = HTMLdoc.getElementById("txt_age")
acctInput.Focus
acctInput.Value = "25"

End Sub

Вывод в Internet Explorer:

enter image description here

Примечание: Попробуйтедобавить ссылку на библиотеку ниже в VBA Editor.

(1) Библиотека объектов Microsoft HTML.

(2) Элементы управления Microsoft Internet.

Попробуйте изменить URL в кодесогласно вашему собственному требованию

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

Вы не можете изменить вещи в iframe в другом домене из-за ограничений безопасности.http://en.wikipedia.org/wiki/Same_origin_policy

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