Соскреб в Интернете в R с помощью первой навигации через модуль JavaScript - PullRequest
0 голосов
/ 16 апреля 2020

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

Это мой случай: я должен очистить обменные курсы для различных валюты с этого сайта www.globocambio.co. Для этого мне нужно (1) перейти к «Я ХОЧУ КОЛОМБИЙСКОЕ ПЕСО» , (2) выбрать валюту (например, «Чилийское песо» ), (3) и пункт назначения сбора (например, «Международный аэропорт Эль Дорадо» ). Только тогда загружается соответствующий обменный курс. Смотрите снимок экрана для иллюстрации. Я пометил три шага выбора красным. Зеленый - это точка данных, которую я хочу очистить для разных валют.

Я не очень знаком с JavaScript, но я пытался понять, что происходит. Вот что я узнал:

  1. Используя Chrome DevTools, я исследовал активность сети при загрузке обменного курса. Существует XHR, называемый «GetPrice», который запрашивает цену, используя этот URL: https://reservations.globocambio.co/DesktopModules/GlobalExchange/API/Widget/GetPrice и используя следующие данные формы ISOAOrigen=CLP&cantidadOrigen=9000&ISOADestino=COP&cantidadDestino=0&centerId=27&operationType=OperationTypesBuying
  2. Я понимаю, что данные формы содержат информацию, которую я первоначально выбрал вручную:
    1. operationType=OperationTypesBuying: это «Я ХОЧУ КОЛОМБИЙСКОЕ ПЕЗО» вариант
    2. ISOAOrigen=CLP: это «Чилийское песо»
    3. centerId=27: это «Международный аэропорт Эль-Дорадо»
  3. Сервер отвечает на мой запрос следующей информацией:

    {“MonedaOrigen":{"ISOA":"CLP","Nombre":null,"Margen":0.1630000000,"Tramo":0.0,"Fixing":2.9000000000},"CantidadOrigen":9000.00,"MonedaDestino":{"ISOA":"COP","Nombre":null,"Margen":0.0,"Tramo":0.0,"Fixing":0.0},"CantidadDestino":21845.70,"TipoCambio":2.42730000000000000000,"MargenOrigen":0.0,"TramoOrigen":0.0,"FixingOrigen":0.0,"MargenDestino":0.0,"TramoDestino":0.0,"FixingDestino":0.0,"IdCentro":"27","Comision":null,"ComisionTramoSuperior":null,"ComisionAplicada":{"CodigoMoneda":null,"CodigoTipoMoneda":0,"ComisionFija":0.0,"ComisionVariable":0.0,"TramoInicio":0.0,"TramoFin":null,"Orden”:0}}

  4. Из этого ответа на сайте пишется "TipoCambio":2.42730000000000000000 с использованием этой строки HTML code: <span id="spTipoCambioCompra">2.427300</span>

  5. Это означает, что "TipoCambio" - это значение, которое я ищу.

Итак, я должен как-то связаться через R с сервером, используя форму Данные как входные переменные. Может кто-нибудь сказать мне, как это сделать? Я имею в виду, понимаю, что мне нужно как-то объединить URL https://reservations.globocambio.co/DesktopModules/GlobalExchange/API/Widget/GetPrice с данными формы «ISOAOrigen=CLP&cantidadOrigen=9000&ISOADestino=COP&cantidadDestino=0&centerId=27&operationType=OperationTypesBuying», но я не знаю, как это работает ..

Любая помощь будет оценена!

Обновление:

Я все еще не знаю, как решить вышеуказанную проблему, пока. Однако я стараюсь подойти к нему небольшими шагами. Используя RSelenium, я сейчас пытаюсь выяснить, как выбрать опцию «Я ХОЧУ КОЛОМБИЙСКОЕ ПЕСО» . Моя идея состояла в том, чтобы использовать следующий код:

library(RSelenium)
remDr <- RSelenium::remoteDriver(remoteServerAddr = "localhost",
                                 port = 4445L,
                                 browserName = "chrome")
remDr$open()
remDr$navigate("https://www.globocambio.co/en/home")
webElem <- remDr$findElement("id", "tabCompra") #What is wrong here?
webElem$clickElement() # Click on "I WANT COLOMBIAN PESO"

Но я получаю сообщение об ошибке после выполнения webElem <- remDr$findElement("id", "tabCompra"):

Сообщение Selenium: нет такого элемента: Невозможно найти элемент : {"method": "css selector", "selector": "# tabCompra"} (Информация о сеансе: chrome = 81.0.4044.113) Для документации по этой ошибке, пожалуйста, посетите: https://www.seleniumhq.org/exceptions/no_such_element.html ... Ошибка: Сводка: NoSuchElement Detail: Не удалось найти элемент на странице с использованием заданных параметров поиска. class: org.openqa.selenium.NoSuchElementException Дополнительные сведения: запустите метод errorDetails

Что я здесь не так делаю?

...