2017-07-20 76 views
0

我實際上是試圖登錄這個網站(http://bit.do)來抓取受保護的數據。R:登錄javascript表格

我試過這種方法建立在以前的問題,但它不起作用。

library(rvest) 
url  <-"http://bit.do/#login/admin" 
pgsession <-html_session(url) 

pgform <-html_form(pgsession)[[2]] 
filled_form <- set_values(pgform, 
        "username" = "username", 
        "password" = "password") 

submit_form(pgsession,filled_form) 

但是當我試圖頭(pgform)我得到這個: $命名 [1] 「」 $方法 [1] 「GET」 $網址 NULL $ ENCTYPE [1 ] 「形式」 $領域 '': '': '': '': '':註冊

也就是說跟我想象中完全不同。也許這是由於代碼?我不知道,這是我能給我的唯一理由。但如果這是由於一個JavaScript(而不是HTML),我該怎麼做這項工作?

回答

0

您將需要獲得的信息來建立一個Cookie,然後使用該cookie的其他要求:

library(httr) 

POST(
    url = "https://inauth.insite.com.br/mod_perl/login.pl", 
    body = list(
    user_username = "YOUR_USERNAME", 
    user_password = "YOUR_PASSWORD", 
    lang = "en", 
    cookies = "no", 
    action = "chklogin", 
    app_id = "bit.do", 
    cookie_name = "InAuth-bitdo", 
    keep_logged_in_days = "5475" 
), 
    add_headers(
    `Referer` = "http://bit.d o/", 
    `Origin` = "http://bit.d o", 
    `X-Requested-With` = "XMLHttpRequest" 
) 
) -> res 

user_login_info <- content(res, as="parsed") 

GET(
    url = "https://bit.d o/admin", 
    add_headers(`Referer` = "http://bit.d o/"), 
    set_cookies(`InAuth-bitdo` = user_login_info$auth_cookie_value) 
) -> res 

注意!!!!我必須在do b/c之間放置一個空格,這個驗證器腦死亡。

他們有一個支付API,我懷疑他們希望你使用,但他們並不禁止從我可以通過快速瀏覽辨別的這種刮擦。

+0

嗨,謝謝你的回答。不幸的是我是新手,我不能完全理解你的代碼。請你解釋一下你在這裏做了什麼?我的意思是,如何通過第三方網站進行身份驗證?爲什麼如果我去inauth.insite.com.br我無法填寫表單中包含的所有信息,只能使用用戶名和密碼?另外,它不會返回任何錯誤,如果我認爲一切都很好?順便說一句,我試圖訪問受密碼保護的數據,但似乎我沒有登錄 – condom

+0

你應該花一些時間來了解基本的網絡和協議如何工作,然後再花些時間來看看HTTP交互如何工作,然後如何web應用程序工作以及如何跟蹤他們的工作方式。我能做的最好的就是說這個網站使用第三方進行身份驗證(可能是許多應用程序的核心),從它獲取一個會話cookie,然後用它來驗證你的原始網站資源。這是這個應用程序的工作原理。如果沒有其他,請試用瀏覽器開發工具教程。 – hrbrmstr

+0

絕對我應該這樣做,我會的。順便說一句,現在我需要解決這個問題。感謝您的建議,但我需要更多的幫助。我試圖運行你的代碼(用我的bit.do用戶名和密碼,對吧?),我沒有得到任何錯誤,但當我試圖抓取數據時,似乎我沒有訪問受保護的數據,就好像我沒有登錄 url < - 'http://bit.do/admin/PROTECTED_DATA_PAGE' data_page < - read_html(url) data < - html_nodes(data_page,'。CSS_SELECTOR') – condom