用于基于Excel数据处理表单的IE脚本

时间:2019-01-07 17:09:02

标签: excel vba

我正在尝试:

  1. 打开特定的URL并传递登录信息
  2. 从Excel抓取数据并搜索指定的数据
  3. 搜索完成后,操纵数据字段以关联Excel数据并在应用程序内执行几个命令
  4. 关闭IE或循环搜索数据中的下一个单元格

我尝试使用VBA表单和模块。

我在网上找到了该代码,该代码似乎曾经可以通过我的凭据,但是我无法使其再次运行。

这些对象all.emailall.password是否可以在网页的源代码中作为ID找到?

HTMLDoc.all.Email.Value = "email@example.com"
HTMLDoc.all.Password.Value = "ex5566"

Dim HTMLDoc As HTMLDocument
Dim oBrowser As InternetExplorer

Sub Login_2_Website() 
    Dim oHTML_Element As IHTMLElement
    Dim sURL As String

    On Error GoTo Err_Clear
    sURL = "example.com"
    Set oBrowser = New InternetExplorer
    oBrowser.Silent = True
    oBrowser.timeout = 60
    oBrowser.navigate sURL
    oBrowser.Visible = True

    Do
    ' Wait till the Browser is loaded
    Loop Until oBrowser.readyState = READYSTATE_COMPLETE

    Set HTMLDoc = oBrowser.Document

    HTMLDoc.all.Email.Value = "email@example.com"
    HTMLDoc.all.Password.Value = "ex5566"

    For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
        If oHTML_Element.Type = "submit" Then oHTML_Element.Click: Exit For
    Next

    ' oBrowser.Refresh ' Refresh If Needed
Err_Clear:
    If Err <> 0 Then
        Err.Clear
        Resume Next
    End If
End Sub

2 个答案:

答案 0 :(得分:0)

我认为您可以使用用于查找提交按钮的相同代码来查找电子邮件和密码元素。如果您知道这些元素的名称或ID(通过检查页面的html代码),则可以使用实例If oHTML_Element.Name = "password" then oHTML_Element.Value = "ex5566"

如果特定元素具有ID,您也可以使用oHTML_Element = document.getElementById("[id of element]") oHTML_Element.Value = "password"直接转到它们,如果它们没有ID,而只有一个名称,也可以这样做,但是您必须找到如果该名称被多次使用,则显示出来。

答案 1 :(得分:0)

Web开发人员可以根据需要命名其输入,按钮,表单,ID。该电子邮件可以命名为电子邮件,ID或用户名或XYZ,这就是为什么必须检查网站中的元素以便可以相应地构建代码的原因。让我们以推特为例。

QHeaderView* headerView = treeWidget->header(); headerView->resizeSection(COLUMN_INDEX, FIXEDSIZE); //Calculate the required size and do this for required columns.

标签是<input class="js-username-field email-input js-initial-focus" type="text" name="session[username_or_email]" autocomplete="on" value="" placeholder="Phone, email or username">标签,类名为input,上面没有ID,因此您不能使用js-username-field email-input js-initial-focus,必须使用{{1} }或使用HTMLDoc.getElementByID,但如果输入多于1个,则必须循环输入并正确检测到所需的输入。

比听起来容易,但是您必须具有HTML的一些基本知识。继续使用twitter,密码标签为:

HTMLDoc.getElementsByClassName

不同的类和不同的名称来区分两者。最后是登录/提交按钮:

HTMLDoc.getElementsByTagName

使用HTML元素的这3部分,您可以通过以下方式登录:

<input class="js-password-field" type="password" name="session[password]" placeholder="Password">

(0)是什么意思?在HTML中,可以有许多具有相同类名的标记,并且在调用getElementsByClassName时它们都在一个数组中,因为登录站点只有具有这些类名的1个标记,所以数组位置“ 0”是您所拥有的寻找。

同样,开发人员可以命名类,ID,他们想要的任何东西,因此您想检查网站以正确编写脚本。