【发布时间】:2021-11-20 09:22:58
【问题描述】:
我是 VBA 新手,正在尝试自动化以下操作:
- 打开网页
- 在我的excel表格中输入一个字符串到搜索窗口,点击搜索
- 点击唯一结果
- 找到并提取与我找到的人相关联的电子邮件地址并复制到 Excel 表中
我已经找到了这个人,但无法获取电子邮件,因为它存储在我无法正确寻址的 htmldiv 元素中。由于没有 ID,我试图以某种方式定位电子邮件地址的存储位置(见附图)。我尝试了不同的方法,但我无法从 Email_search 对象中获取值。其他变量保持为空。将数据存储到 Excel 工作表中可与网页中的其他数据一起使用。
对不起,如果这是微不足道的,但我被困住了,希望你的帮助。出于测试目的,您可以将“input_element.Value”的值替换为“Dipl.-Ing.Univ. Ali Riza Acer”。这是我的代码:
Sub Test1()
Dim IE As Object
'Dim doc As HTMLDocument
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "https://www.bayika.de/de/ingenieursuche/"
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
Set doc = IE.document
'Get string from excel and put into search window
Set the_input_elements = IE.document.getElementsByName("suchwort")
For Each input_element In the_input_elements
If input_element.getAttribute("name") = "suchwort" Then
input_element.Value = ThisWorkbook.Sheets("Sortiert").Range("B2").Value
Exit For
End If
Next input_element
'Press search button
Set the_input_elements2 = IE.document.getElementsByTagName("button")
For Each input_element2 In the_input_elements2
input_element2.Click
Exit For
'End If
Next input_element2
'Wait until webpage has loaded
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
'Click the only list entry
Set the_input_elements3 = IE.document.getElementsByClassName("listEntry listEntryClickable listEntryClickableJS")
For Each input_element3 In the_input_elements3
input_element3.Click
Exit For
Next input_element3
'%%%%%%%%%%%%%% From here the code does not work %%%%%%%%%%%%
'Find email and save - Variant 1: Look for a and target line, doesn't work because it cannot get the value out
'Set the_input_elements5 = IE.document.getElementsByTagName("a")(57)
'ThisWorkbook.Sheets("Sortiert").Range("F2").Value = the_input_elements5
Count = 0
Set Email_search = IE.document.getElementsByClassName("elementStandard elementContent elementContainerStandard elementContainerStandard_var1 elementContainerStandardColumns elementContainerStandardColumns2 elementContainerStandardColumns_var5050 wglAdjustHeightMax")
For Each Email_element In Email_search
Email = Email_search.getElementsByClassName("col col1")
Var = 1
Count = Count + Var
If InStr(1, Email, "mailto") > 0 Then
ThisWorkbook.Sheets("Sortiert").Range("F2").Value = Email
Exit For
End If
Next Email_element
End Sub
这是我要提取的网站部分:
来自网页的代码部分
非常感谢!
【问题讨论】:
标签: html excel vba web-scraping