2017-07-20 43 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