我用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&scheme=http&postMessageOrigin=http%3A%2F%2Ffantasy.espn.com%2Fbasketball%2Fteam%3FleagueId%3D24874190%26teamId%3D1%26statSplit%3DcurrSeason&cookieDomain=espn.com&config=PROD&logLevel=INFO&topHost=fantasy.espn.com&ageBand=ADULT&countryCode=CA&langPref=en-US&cssOverride=https%3A%2F%2Fsecure.espncdn.com%2Fcombiner%2Fc%3Fcss%3Ddisneyid%2Fcore.css%2Cdisneyid%2Ffantasy.css&responderPage=https%3A%2F%2Fwww.espn.com%2Fdisneyid%2Fresponder%2Findex.html&buildId=165f40c7564" style="display: none;"></iframe>
由于安全限制,无法在另一个域上的iframe中更改内容。http://en.wikipedia.org/wiki/Same_origin_policy
尝试参考下面的例子可以解决您的问题。
主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>
正如在另一个答案中所提到的,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。有没有一种方法,我可以选择日期或输入日期在一个地方,也许在一个特殊的文本框,并链接其他的,以获得他们的