当前位置: 首页 > 知识库问答 >
问题:

在网页中填写两个输入字段

钱澄邈
2023-03-14

我用VBA和IE编写了一个脚本来填充两个输入字段来登录网页。

当我尝试执行我的脚本时,它会抛出访问被拒绝错误,因为输入字段在其中。如何用凭据填充两个输入字段?

这是网站链接

这是我迄今为止的尝试:

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

您可以尝试输入任何详细信息。我所需要知道的是我怎样才能填满这两个盒子。

连接到iframe内容的Html元素:

<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个答案

谭志用
2023-03-14

由于安全限制,无法在另一个域上的iframe中更改内容。http://en.wikipedia.org/wiki/Same_origin_policy

张唯
2023-03-14

尝试参考下面的例子可以解决您的问题。

主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>
柳宾实
2023-03-14

正如在另一个答案中所提到的,iframesrc位于不同的域中,相同的域策略有效地排除了IE

对于使用铬的VBA,使用selenium basic很容易做到这一点。您还需要循环,直到可以输入登录详细信息。我添加了一个超时来防止无限循环。

安装selenium后,您需要转到VBE

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
 类似资料:
  • 我有一个用html创建的表单,有两个输入字段和一个按钮。当点击按钮时,我希望调用一个函数,然后将两个数字相加,然后通过报警函数显示总和。 我知道当按钮被点击时如何调用函数,我知道如何读取并将两个输入存储在单独的变量中。 我想知道一些如何以最简单的方式验证输入为数字的技巧? 这段代码由于某种原因起作用,如果num1是正确的,但num2不是,它会给出消息NaN,而不是报警消息!

  • 我试图填补网页中的一个输入框,实际触发事件的结果是自动更新一些隐藏的字段。 网页背后的代码 在上面代码的第一个输入标记行上有5个事件侦听器- 、< code>onkeypress、< code>onfocus、< code>onchange、< code>onpaste。我可以将值传递给输入框,但是相关的事件没有被释放。 代码已尝试(无错误,但未调度事件) 也尝试调度事件,但显示错误 还尝试了如下

  • 问题内容: 如何在AngularJS表单元素内的输入字段中自动大写第一个字符? 我已经看到了jQuery解决方案,但相信在AngularJS中必须使用指令来完成此操作。 问题答案: 是的,您需要定义一个指令并定义自己的解析器函数: HTML: 小提琴

  • 请帮忙。注册页面一直显示此字段是必需的错误。我是初学者谢谢 模型。派克 来自django。数据库导入模型 从django.contrib.auth.models导入AbstractBaseUser, BaseUserManager 类用户管理器(BaseUserManager): 类帐户(AbstractBaseUser): views.py 来自django。快捷方式导入、渲染、重定向 来自dj

  • 我正在尝试制作一个包含多个页面的PDF格式,这些表格都是纸质表格。我已经将它们导入到pdf格式中,添加了文本字段,并正在努力寻找更快地填写这些表格的方法。在多个页面上有一个日期的文本字段。在1页上,我需要该格式的dat 200129=YYMMDD格式,在其他页上,我需要它为29-Jan-2020。有没有一种方法,我可以选择日期或输入日期在一个地方,也许在一个特殊的文本框,并链接其他的,以获得他们的