RSelenium - получить текст из формы результатов

Я тщательно проконсультировался с SO, чтобы избежать дубликатов, но, похоже, ничего не получается. С гордостью могу сказать, что RSelenium и Docker работают на моем Mac. Проблема заключается в том, как извлечь результат kms из: https://www.freemaptools.com/how-far-is-it-between.htm Ожидаемый результат — 960,467 км. Каждый год мне нужно проверять еще 800 дистанций, так что решение этой проблемы определенно стоит затраченных усилий. Я получаю только пустую строку, см. [1] "" ближе к концу.

Это происходит из-за того, что результат kms является полем ввода «только для чтения»? Как извлечь результат км? Заранее спасибо.

## Start docker in Launchpad
## docker pull selenium/standalone-firefox
## docker run -d -p 4445:4444 selenium/standalone-firefox

library(RSelenium)

remDr <- remoteDriver(remoteServerAddr = "192.168.99.100", port = 4445L, browserName = "firefox")
remDr$open()

# Proof that docker and RSelenium both work  -----------------------------------

#[1] "Connecting to remote server"
# $`moz:profile`
# [1] "/tmp/rust_mozprofile.VrWrcVvdncmw"
# 
# $rotatable
# [1] FALSE
# 
# $specificationLevel
# [1] 0
# 
# $`moz:accessibilityChecks`
# [1] FALSE
# 
# $acceptInsecureCerts
# [1] FALSE
# 
# $browserVersion
# [1] "55.0.3"
# 
# $platformVersion
# [1] "4.4.83-boot2docker"
# 
# $`moz:processID`
# [1] 52
# 
# $timeouts
# $timeouts$implicit
# [1] 0
# 
# $timeouts$pageLoad
# [1] 300000
# 
# $timeouts$script
# [1] 30000
# 
# 
# $browserName
# [1] "firefox"
# 
# $pageLoadStrategy
# [1] "normal"
# 
# $platformName
# [1] "linux"
# 
# $id
# [1] "32ad02e8-e98c-4061-bfe7-e89c7515cb2f"

# Simulate browser session and fill out form -----------------------------------

remDr$navigate('https://www.freemaptools.com/how-far-is-it-between.htm')

from <- remDr$findElement(using = 'xpath', value = './/*[@id="pointa"]')
to <- remDr$findElement(using = 'xpath', value = './/*[@id="pointb"]')

from$sendKeysToElement(list('London, UK'))
to$sendKeysToElement(list('Milan, Italy'))

show <- remDr$findElement(using = 'xpath', value = './/*[@id="content"]/form/table/tbody/tr[2]/td[4]/p')
show$sendKeysToElement(list(key = 'enter'))

distance <- remDr$findElement(using = 'xpath', value = './/*[@id="distance"]')

distance$getElementText()[[1]]
# [1] ""

remDr$quit()
remDr$closeServer()

person Hendrik    schedule 03.09.2017    source источник


Ответы (1)


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

distance$getElementAttribute("value")

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

person Tarun Lalwani    schedule 03.09.2017