Jump to content
  • Debido a la crisis sanitaria, hasta el día 31 de marzo, el registro al foro de Ayuda Excel será totalmente gratuito para facilitar el teletrabajo. Todos los registros que se produzcan entre estas fechas tendrán acceso gratuito ilimitado a la comunidad hasta el 30 de abril.

    Regístrate

    Si te surge alguna duda mientras estás trabajando en casa con Excel, ya tienes a quien preguntar.

    Espero que esta medida te sirva de ayuda. Frenar la expansión del coronavirus depende de todos. Sé responsable.

Guz Man

Web Scrapping: Seleccionar item de ListBox por Nombre

Recommended Posts

Estimados,

estoy intentando programar un código VBA en Excel para navegar por una página web y obtener información. En algunas secciones me encuentro con una ListBox (DropDown List, <select> tag en HTML, como quieran llamarle).

No sé cómo seleccionar un ítem por nombre en ese listado.

Utilizo referencia a estas librerías:

1. Microsoft Internet Controls
2. HTML Object Library

Pongo un poco del código HTML de la página como referencia.

<select onchange="redirect(this.value);" name="select" id="select" style="width: 165px;">                  
<option value="">Select a fund</option>                              
   <option value="/wps/myportal/mfs/non-us-advisor/products/meridian-funds/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTwEojHfOSjC3S9aOKUtNSi1KL9DLyi0v0I8rLy_Vy04r1kvNz9cOd9aOSKjx88gL1C7KjkiodFRUBZk22dA!!/dl5/d5/L2dJQSEvUUt3QS80SmlFL1o2X09RMlFPN0gyMEczU0MwMkQ0TzM1VTMxRk8y/?clearPortletSession=true&productId=480&shareId=33&viewMode=profile">                                                                     
      <!-- Do Nothing -->   
      Absolute Return Fund                              
   </option>                        
        <option value="/wps/myportal/mfs/non-us-advisor/products/meridian-funds/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTwEojHfOSjC3S9aOKUtNSi1KL9DLyi0v0I8rLy_Vy04r1kvNz9cOd9aOSKjx88gL1C7KjkiodFRUBZk22dA!!/dl5/d5/L2dJQSEvUUt3QS80SmlFL1o2X09RMlFPN0gyMEczU0MwMkQ0TzM1VTMxRk8y/?clearPortletSession=true&productId=1466&shareId=33&viewMode=profile">
      <!-- Do Nothing -->
           Asia Pacific Ex-Japan Fund                              
   </option>                        
   <option value="/wps/myportal/mfs/non-us-advisor/products/meridian-funds/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTwEojHfOSjC3S9aOKUtNSi1KL9DLyi0v0I8rLy_Vy04r1kvNz9cOd9aOSKjx88gL1C7KjkiodFRUBZk22dA!!/dl5/d5/L2dJQSEvUUt3QS80SmlFL1o2X09RMlFPN0gyMEczU0MwMkQ0TzM1VTMxRk8y/?clearPortletSession=true&productId=139597&shareId=33&viewMode=profile">
      <!-- Do Nothing -->      
      Blended Research European Equity Fund                  
   </option>
</select>

Me gustaría poder seleccionar por el nombre, por ejemplo: Absolute Return Fund, Asia Pacific Ex-Japan Fund, Blended Research European Equity Fund. 
 

Tengo el Option Explicit habilitado, por lo que si no es molestia, agradezco que especifiquen el tipo de variable (de ser posible).
 

No soy muy experiente programando, así que cualquier comentario por más básico que sea me ayudará.

Share this post


Link to post
Share on other sites

Hola, ya pude resolver el tema en otro foro. Comparto la solución:

Option Explicit

Sub Login_ToMFS()

' *** LOGIN TO MFS WEBSITE ***

Dim IE As New SHDocVw.InternetExplorer

Dim URL As String
URL = "https://www.mfs.com/wps/myportal/mfs/non-us-advisor/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOL9A40C_c09jAzcjYOdDYxcTPyNTUONDS1NjPW99KPSc_KTgErDnYB6zXODk9OBuiId85KMLdL1o4pS01KLUov0MvKLS_QjysvL9XLTivWS83P1C7Kj3NIdFRUBBU7kpw!!/dl5/d5/L2dBISEvZ0FBIS9nQSEh/#"


IE.Visible = True
IE.Navigate URL

Do While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
Loop

Dim HTMLDoc As MSHTML.HTMLDocument
Set HTMLDoc = IE.Document

' *** Check credentials and autologin

' GET USER ID (HTML code)
Dim UserIDCode As String
UserIDCode = "userId"
Dim HTMLInputUser As MSHTML.IHTMLElement
Set HTMLInputUser = HTMLDoc.getElementById(UserIDCode) 'User ID

If Not HTMLInputUser Is Nothing Then ' Check if user input exists

    ' USER ID
    Dim UserIDValue As String
    UserIDValue = "JohnWilliams"
    HTMLInputUser.Value = UserIDValue

    ' GET PASSWORD (HTML code)
    Dim UserPasswordCode As String
    UserPasswordCode = "paswordId"
    Dim HTMLInputPassword As MSHTML.IHTMLElement
    Set HTMLInputPassword = HTMLDoc.getElementById(UserPasswordCode) 'Password

    ' PASSWORD
    Dim UserPasswordValue As String
    UserPasswordValue = "John123qwe"
    HTMLInputPassword.Value = UserPasswordValue

    ' Login and submit
    Dim HTMLButtonLogin As MSHTML.IHTMLElement
    Dim HTMLButtonsLogin As MSHTML.IHTMLElementCollection
    
    Dim LoginButton As String
    LoginButton = "login_btn"
    Set HTMLButtonsLogin = HTMLDoc.getElementsByClassName(LoginButton)

    For Each HTMLButtonLogin In HTMLButtonsLogin
        Dim LoginValue As String
        LoginValue = "Login"
        If HTMLButtonLogin.getAttribute("value") = LoginValue Then
            HTMLButtonLogin.Click
            Exit For
        End If
    Next HTMLButtonLogin
End If

Application.Wait DateAdd("s", 20, Now)

Call MFS_Global_HighYield(IE, "Absolute Return Fund") 'To look up for the specific fund
End Sub
Sub MFS_Global_HighYield(IE As SHDocVw.InternetExplorer, sval As String)

Dim optCol As MSHTML.HTMLSelectElement
Dim i As Long

Set optCol = IE.Document.getElementById("select")
    For i = 0 To optCol.Length - 1
        If InStr(optCol(i).innerText, sval) > 0 Then
            optCol(i).Selected = True
            Exit For
        End If
    Next

'Fire JS event
optCol.FireEvent ("onchange")
End Sub

Se puede marcar como solucionado.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png