2017-07-20 6 views
0

私はRSeleniumを使用してソーシャルメディアのWebサイトを自動的にスクロールし、投稿を保存しています。私は、Web要素の最後のインスタンス(具体的には、post date)を探したいと思いますが、現在のメソッド(findElements()を使用してすべてのpost dateを返し、最後のものを抽出します - 下のコードを参照)ページの下をずっとスクロールしました。RSeleniumを使用してWebページの最後のWeb要素を見つける効率的な方法は何ですか?

Webページの最後のWeb要素(具体的には、掲載日)を迅速に見つける方法をお勧めする人はいますか?たとえば、(最初にの一致を検索する)findElement()を使用して、ページの一番下から上に向かって開始する方法がありますか?どんな提案も大歓迎です。

ここに私のコードの例はありませんが、私はそのページを遠くにスクロールすると、受け入れられないほど長い時間がかかります。

# Load webpage of interest 
library(RSelenium) 
library(rvest) 
rD = rsDriver(browser = "firefox") 
remDr = rD[["client"]] 
url = paste0("https://stocktwits.com/symbol/NZDCHF") 
remDr$navigate(url) 

# Scroll down page three times, loading new content each time. 
for (i in 1:3) { #Only scrolling 3 times for illustration 
    remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);") 
    Sys.sleep(2) #delay by 3sec to give chance to load 
} 

# Get date of last post. WORKS BUT TAKES FOREVER IF I'VE SCROLLED MANY TIMES 
e = remDr$findElements("css", ".message-date") 
last_date = e[[length(e)]]$getElementText() 

答えて

0

私は上記を解決するための不器用な回避策を見つけました。具体的には、最後にというメッセージ(日付を含む)を取得するために以下を使用し、その後の日付を抽出する正規表現を書きました。

last_child = remDriver$findElement(using = "css selector", 
           value = ".messageli:last-child") 
last_child = unlist(last_child$getElementText()) 
関連する問題