на этой домашней странице "http://www.kpia.or.kr/index.php/year_sugub"
Если вы проверите html, есть 6 идентификаторов от li1 до li6. Первое, что я заметил после первого использования chromedriver, было то, что метод ожидания был неэффективенПоэтому я искал различные способы оптимизации ожидания после нажатия на Интернет для использования на этой домашней странице. Например, я применил следующие три вида кодирования.
ex1) Application.Wait Now + TimeSerial(0, 0, 5)
ex2) .FindElementById ("li2", timeout: = 10000). Нажмите
ex3) При возникновении ошибки "Do 'DoEvents" Resume Next "Set ele =.FindElementById ("li2") 'При ошибке GoTo 0' Если Timer - t = 10, затем Exit Do '<== Чтобы избежать бесконечного цикла' Цикл Пока ele Nothing </p>
Однако мы не смогли окончательно найтиспособ оптимизации метода ожидания без использования Application.Wait Now + TimeSerial (0, 0, 5). Этот метод загружается не полностью после нажатия кнопки li2, но иногда выполняются дополнительные задачи.
Итак, я подумал оформальная логика кодированиячто я мог бы иногда использовать, чтобы делать подобное кодирование в будущем, и я придумал следующую логику.Например, в li2 значение этилена всегда является фиксированным значением с результирующим значением, поэтому, если вы щелкнете по li2 и затем найдете значение «SM», данные будут загружены в лист.Далее, «LDPE» в li3 - это способ вставить данные в лист после завершения загрузки.Так что я пишу с этой идеей, и я не могу устранить ошибку, пока я работаю над VBA.
Dim d As WebDriver, ws As Worksheet, clipboard As Object
Set d = New ChromeDriver
Set ws = ThisWorkbook.Worksheets("Sheet3")
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Const URL = "http://www.kpia.or.kr/index.php/year_sugub"
Dim html As HTMLDocument
Set html = New HTMLDocument
With d
.AddArgument "--headless"
.Start "Chrome"
.get URL, Raise:=False
rep:
.FindElementById("li2", timeout:=10000).Click
Dim Posts As WebElements
Dim elem As WebElements
Dim a1 As Integer
For Each Posts In .FindElementsByClass("bbs")
For Each elem In Posts.FindElementsByCss("td")
If Not elem.Text = "SM" Is Nothing Then
html.body.innerHTML = d.PageSource
Dim tarTable As HTMLTable
Dim hTable As HTMLTable
For Each tarTable In html.getElementsByTagName("table")
If InStr(tarTable.className, "bbs") <> 0 Then
Set hTable = tarTable
End If
Next
clipboard.SetText .FindElementById("table_body").Attribute("outerText")
clipboard.PutInClipboard
else
goto rep
end if
.Quit
End With
Если он находит значение, соответствующее значению SM, он предполагает, что загрузка завершенаи приступает к передаче связанных данных в буфер обмена.Если значение SM не найдено, используйте GOTO для использования .FindElementById (тайм-аут "li2": = 10000).Я думал, что смогу это исправить, создав цикл, который перезапускается с .Click.
Я новичок в процессе экономии времени и усердного обучения во время чтения, поэтому я был бы очень признателен, если бы вы могли дать мне большесправка.