Как установить выпадающий список на сайте, чтобы выбрать опцию и очистить данные - PullRequest
0 голосов
/ 29 мая 2019

Сайт изменился, поэтому я не могу больше с него сосканировать данные. Мне просто нужно изменить установленную строку ниже, но я попробовал несколько вещей, но ни одна из них не сработала. Я не очень разбираюсь в этой области, боюсь, но остальная часть кода работает. Например, url https://www.gurufocus.com/stock/CFWFF/insider и это таблица внутренних транзакций, для которых я пытаюсь нажать раскрывающийся список и изменить его на 100 вместо 10:

t = Timer
noTable = 0
Do
    Set DropDown = doc.querySelectorAll(".el-dropdown-menu__item")
    lastDropDrownItemIndex = DropDown.Length - 1
    If Timer - t > MAX_WAIT_SEC Then
        noTable = 1
        Exit Do
    End If
Loop While lastDropDrownItemIndex < 1
If noTable = 1 Then GoTo noTableEscape
DropDown.Item(lastDropDrownItemIndex).Click

Спасибо

1 Ответ

0 голосов
/ 29 мая 2019

Ладно, не знаю точно, что вам нужно, но сайт, который вы просматриваете, предлагает API, который, на мой взгляд, может значительно облегчить вашу жизнь. Проще говоря, это означает, что он обеспечивает простой способ запроса данных с использованием некоторых параметров, встроенных в URL. Возвращает запрошенные данные в формате JSON.

В следующем коде я буду использовать метод запроса XMLHTTP и анализатор JSON. Для этого вам понадобится следующее:

  1. Анализатор JSON , он помогает вам анализировать загруженные данные. Следуйте инструкциям по установке, чтобы импортировать его в ваш проект
  2. Ссылка на библиотеку Microsoft Scripting Runtime. Это нужно парсеру JSON.
  3. Ссылка на библиотеку Microsoft WinHTTP Services, Version 5.1. Позволяет использовать объект HTTP-запроса.

В демонстрационных целях следующий код будет печатать только в ближайшем окне имя и позицию первой записи. Вы можете изменить код в соответствии со своими потребностями.

Sub test()
Dim req As New WinHttpRequest
Dim jsonResponse As String
Dim jsonParsed As Object
Dim url As String
Dim pageNum As Integer
Dim numPerPage As Integer
pageNum = 1 'You can change this parameter to navigate in different pages
numPerPage = 100 'You can change this parameter to control the number of entries
url = "https://www.gurufocus.com/reader/_api/stocks/OTCPK:CFWFF/insider?page=" & pageNum & "&per_page=" & numPerPage & "&sort=date%7Cdesc"

With req
    .Open "GET", url, False
    .setRequestHeader "Accept", "application/json, text/plain, */*"
    .setRequestHeader "Authorization", ThisWorkbook.Worksheets("The name of your Worksheet").Range("A1").Value 'I have stored a string that is essential to the request in cell A1
    .send
    jsonResponse = .responseText
End With
Set jsonParsed = JsonConverter.ParseJson(jsonResponse)
Debug.Print jsonParsed("data")(1)("name") 'get the name parameter of the first entry
Debug.Print jsonParsed("data")(1)("position") 'get the position parameter of the first entry

End Sub

Обратите внимание, что есть очень длинная строка, которая необходима для запроса, который я сохранил в ячейке A1. Эта строка выглядит так:

Знаменосец eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImUxYjAwMmYxMjczMGRiMTBmMmZkYjJkNDk0YTU4NjRmZDZjOWY3ZGI4ZmI1NDY1NTQ2MzZlMGJhNzkxODUxNmY4NTM2ZWIzZDNhODhmN2VmIn0.eyJhdWQiOiIyIiwianRpIjoiZTFiMDAyZjEyNzMwZGIxMGYyZmRiMmQ0OTRhNTg2NGZkNmM5ZjdkYjhmYjU0NjU1NDYzNmUwYmE3OTE4NTE2Zjg1MzZlYjNkM2E4OGY3ZWYiLCJpYXQiOjE1NTkwNzA3OTcsIm5iZiI6MTU1OTA3MDc5NywiZXhwIjoxNTY5NDM4NzkzLCJzdWIiOiIiLCJzY29wZXMiOltdfQ.mZ4DqhUk9YAU6JYDBScF8MJ_zHPyL94bAec7LxZTaWipcWf9uesdGDMDC9v_7W-6zrtXAUWhk4YAL70E5rpPjM7gusYH0RfO48O2PnaV8gsqXoNCFwFBOHuxh109q7X0YsNkfX2wX8m3XigtK9A_YAGID7wxgX96lwzBevsDJ3borHMcJlQtxidF_Bq2D5WPASsuy3jdY80HkOCR1y4eaSIswBEtK5rPj_xy7VXRbYGhLklqw4wgHgq4blfaHnVVmPXf6k8mx45ye8vPecS-w9kjuDOHVn2mvU6mpBzqEpbH4lqpiqmYG7M-CvB1joEAcMQtcilCvsdfKOusoC2MU4_vPtF3Q4ZFVaEcXIQgomdKtFa_XGpCudit45b2rEFacKMUENqLj_sPwYkgM1IPl1lQfR-VpigqnCHPAxVQAPzqwJvS6CxuYOPmvnrx23fBAillP7LtDHwHtlMpgZUjdB5y6IWsia76crM4kbkrKn3zc8xoAGb1fIrgJlY-9hOzrwsmrchantEdYOFZjcMJvhCnlfvnEm6kT2Sdcu4o6TndTZJjrVmD4mb-jNGy4kw_mAx1DfyqR7GLtCVSzcSLKgrrwCJEL22K2bfXH 2HExXvgLFbPXivVZJc70TnF9lJmx_dx79cxAm7szFGIdrs56bAC4mdKpvKL3BNmVY-J-G0 * * тысяча двадцать-три

Эта же строка должна работать и для вас.

Результат выглядит так:

Brown, James Michael
Senior Officer

Каждая из 100 записей данных имеет следующую структуру:

enter image description here

Довольно легко просмотреть все записи. Например, чтобы напечатать имя всех записей, вы должны сделать это:

Dim item As Object
For Each item In jsonParsed("data")
    Debug.Print item("name")
Next item

Наконец, вы также можете просмотреть все параметры каждой записи. Например, следующий код печатает все параметры и их соответствующие значения для первой записи:

Dim key As Variant
For Each key In jsonParsed("data")(1).Keys
    Debug.Print key & ": " & jsonParsed("data")(1)(key)
Next key 

Таким образом, вы можете получить доступ к любому параметру для каждой записи.

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