Как правильно настроить таргетинг на элементы кнопок CSS с помощью VBA Selenium, если у них нет идентификаторов? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь настроить таргетинг и нажать кнопку на сайте, который требует от меня открыть раскрывающееся меню, выбрать опцию в списке и нажать «Применить».Я получил это большую часть пути там, но я не могу заставить его нажать на кнопку.Вот ссылка на соответствующий HTML-код, с которым я работаю https://pastebin.com/n5hJY3ua.. И полный путь Xpath кнопки: / html / body / div [5] / div [3] / div / button [1]

Я пробовал различные способы нацеливания на кнопку, такие как:

.FindElementByXPath("//div[@button='Apply']").Click

.FindElementByClass("applyBtn btn btn-small btn-success").Click

.FindElementByXPath(".//div[@button, 'Apply']").Click

Option Explicit

Public Sub ClickDate()
    Dim t As Date
    Dim ele As Object
    Dim driver As New ChromeDriver
    Dim post As WebElement
    Dim i As Integer
    Dim mysheet As Worksheet        

    Const MAX_WAIT_SEC As Long = 10
    Const INURL = "https://ss3.shipstation.com/#/dashboard"
    Const URL = "https://ss3.shipstation.com/"

    Set mysheet = Sheets("Sheet1")

    With driver '<==log into shipstation
        .Start "Chrome"
        .get URL
        t = Timer
        Do
            On Error Resume Next
            Set ele = .FindElementById("username")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While ele Is Nothing

        If ele Is Nothing Then Exit Sub
        ele.SendKeys "Username"
        .FindElementById("password").SendKeys "Password"
        .FindElementById("btn-login").Click
    End With


    With driver '<==select todays date
        .get INURL  
        Dim drf As Object
        t = Timer

        Do
            Set drf = driver.FindElementsByCss(".col-sm-4 h2")
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While drf.Count = 0

        If drf.Count > 0 Then
            .FindElementByClass("display-date").Click

            With .FindElementByXPath("//html/body/div/*/ul/li[1]")
                .Click
            End With

            .FindElementByXPath("//div[contains(@button, 'applyBtn btn btn-small btn-success')]").Click
        End If

        i = 2
        Dim item As Object, nodeList As Object, r As Long
        t = Timer

        Do
            Set nodeList = driver.FindElementsByCss(".col-sm-4 h2")
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While nodeList.Count = 0

        If nodeList.Count > 0 Then
            For Each item In nodeList
                r = r + 1
                ActiveSheet.Cells(2, r) = item.Text
            Next
        End If
    End With
End Sub

Мне нужно нажать кнопку Применить, чтобы сайт выполнил поиск по дате сегодня, а затем получить данныеи отобразить его на листе Excel.Все работает, кроме возможности нажать на кнопку.Мне возвращается

Ошибка времени выполнения '7': NoSuchElementError.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы можете уменьшить селектор CSS и использовать один селектор классов.Метод выбора CSS будет быстрее, чем xpath:

driver.findElementByCss(".applyBtn").click

Правильный синтаксис findElementByCss для VBA selenium basic

0 голосов
/ 14 февраля 2019

Пожалуйста, попробуйте любой из этих двух методов. Это должно сработать.

findElementByXPath("//button[contains(text(), 'Apply')]")

Или

findElementByXPath("//button[text()[contains(.,'Apply')]]")

Или

driver.findElementByCssSelector("button.applyBtn")

Пожалуйста, дайте мне знать, если эторабота.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...