У меня есть код, который позволяет мне войти на сайт с учетными данными.Я заменил их на скрытые1, скрытые2 и скрытые3 в коде для конфиденциальности.Код входа в систему на веб-сайте затем перейдите к конкретной странице, которая имеет два раскрывающихся списка.В первом списке, в котором есть четыре параметра (это четыре параметра), я выбираю параметр, после чего второй раскрывающийся список обновляется в соответствии со списком list1, но список List2 можно изменить, поскольку параметры неизвестны. Следующий шаг - щелкнутькнопка, которая переходит на другую страницу с двумя элементами, которые я нажал, чтобы экспортировать файл PDF.До сих пор все в порядке.
Проблема в том, что я поставил линию ожидания на 15 секунд, чтобы дождаться загрузки, и я ищу более эффективный способ проверить, загружен файл или нет, используя selenium vba.
Вот код
Private Sub Test()
Dim bot As New Selenium.WebDriver
Dim sList1 As SelectElement
Dim sList2 As SelectElement
Dim By As New By
Dim fso As Object
Dim myFolder As Object
Dim objFile As Object
Dim fil As String
Dim fn As String
Dim dteFile As Date
Dim n As Integer
Dim x As Integer
Dim j As Integer
Const DOWNLOAD_DIRECTORY As String = "C:\Users\Future\Desktop\Files"
Set fso = CreateObject("Scripting.FileSystemObject")
If Len(Dir(DOWNLOAD_DIRECTORY, vbDirectory)) = 0 Then MkDir DOWNLOAD_DIRECTORY
With bot
.SetPreference "download.default_directory", DOWNLOAD_DIRECTORY
.SetPreference "download.directory_upgrade", True
.SetPreference "download.prompt_for_download", False
.Start "chrome", "http://primprep.emis.gov.eg"
.Get "/"
.FindElementById("ContentPlaceHolder1_TextBox1").SendKeys "hidden1"
.FindElementById("ContentPlaceHolder1_TextBox3").SendKeys "hidden2"
.FindElementById("ContentPlaceHolder1_TextBox2").SendKeys "hidden3"
.FindElementById("ContentPlaceHolder1_Button2").Click
.FindElementById("Button1").Click
.Wait 1000
mLoop:
n = n + 1
If n = 5 Then Stop
x = 0
sPoint:
Set sList1 = .FindElementById("ContentPlaceHolder1_Dedara").AsSelect
sList1.SelectByIndex n
.Wait 2000
Set sList2 = .FindElementById("ContentPlaceHolder1_Dschool").AsSelect
For j = x + 1 To sList2.Options.Count
If x + 1 >= sList2.Options.Count Then GoTo mLoop
fil = Format(n, "00") & "-" & Format(j, "00") & "-" & Application.Trim(sList2.Options(j + 1).Text) & ".pdf"
sList2.SelectByIndex j
.FindElementById("ContentPlaceHolder1_Button1").Click
.Wait 2000
If .IsElementPresent(By.ID("ContentPlaceHolder1_Label2")) Then
If .FindElementById("ContentPlaceHolder1_Label2").Text = "لا يوجد بيانات لعرضها" Then
Debug.Print "No Data For This School >> " & Application.Trim(Replace(fil, ".pdf", ""))
x = x + 1
GoTo sPoint
End If
End If
Do
Loop While .FindElementsById("IconImg_CrystalReportViewer1_toptoolbar_print").Count = 0
.FindElementById("IconImg_CrystalReportViewer1_toptoolbar_print").Click
Do
Loop While .FindElementsByCss("[id^='theBttnbobjid']").Count = 0
.FindElementByCss("[id^='theBttnbobjid']").Click
Application.Wait Now + TimeSerial(0, 0, 15)
'I need a way to check if the file downloaded or not instead of waiting for 15 seconds
'as sometimes the file took no time and sometimes the file may took over 15 seconds
Set myFolder = fso.GetFolder(DOWNLOAD_DIRECTORY)
dteFile = DateSerial(1900, 1, 1)
For Each objFile In myFolder.Files
If objFile.DateLastModified > dteFile And fso.GetExtensionName(objFile.Path) = "pdf" Then
dteFile = objFile.DateLastModified
fn = objFile.name
End If
Next objFile
If fn <> vbNullString And Not fso.FileExists(DOWNLOAD_DIRECTORY & "\" & fil) Then
fso.MoveFile DOWNLOAD_DIRECTORY & "\" & fn, DOWNLOAD_DIRECTORY & "\" & fil
End If
.FindElementById("ContentPlaceHolder1_Button2").Click
.Wait 2000
x = x + 1
GoTo sPoint
Next j
GoTo mLoop
End With
End Sub
Я искал такую тему и нашел ссылку, но она была для селена Java.И мне нужно разобраться с селеном VBA.Привет