2015-02-09 9 views
18

Bir formda e-posta/parola girilmesini gerektiren bir web sayfası oluşturmak için rvest kullanmaya çalışıyorum. Bir web sayfasındaki standart olmayan formlarda oturum açmak için rvest veya httr kullanarak

rm(list=ls()) 
library(rvest) 

### Trying to sign into a form using email/password 

url  <-"http://www.perfectgame.org/" ## page to spider 
pgsession <-html_session(url)    ## create session 
pgform <-html_form(pgsession)[[1]]  ## pull form from session 

set_values(pgform, `ctl00$Header2$HeaderTop1$tbUsername` = "[email protected]") 
set_values(pgform, `ctl00$Header2$HeaderTop1$tbPassword` = "mypassword") 

submit_form(pgsession,pgform,submit=`ctl00$Header2$HeaderTop1$Button1`) 

Bu

bana aşağıdaki hata iletisini veriyor:

Sunduğum parametre belirtmeden formu gönderirseniz 'ctl00 $ Header2 $ HeaderTop1 $ Button1'

bulunamadı

Error in submit_request(form, submit) : 

nesne, ben anlayın:

Submitting with 'ctl00$Header2$HeaderTop1$Button1' 
Error in function (type, msg, asError = TRUE) : <url> malformed 

Ayrıca parametreleri doğrudan belirtildiği gibi httre'ye aktarmayı denedim Bu söz konusu: How can I POST a simple HTML form in R? ancak kabul etmedi "gönder" parametresi veya herhangi tırnaklar olmadan ya geriye tırnak (``), tırnak işaretleri gönder düğmesi: Ben giriş yapabilirsiniz nasıl

library(httr) 

url <- "http://www.perfectgame.org/Rankings/Players/Default.aspx?gyear=2015&num=500" 

fd <- list(
    submit = `ctl00$Header2$HeaderTop1$Button1`, 
    `ctl00$Header2$HeaderTop1$tbUsername` = "[email protected]", 
    `ctl00$Header2$HeaderTop1$tbPassword` = "mypassword") 

resp<-POST(url, body=fd, encode="form") 
content(resp) 

Herhangi bir fikir Bir R oturumu ve giriş duvarının arkasındaki verileri örümcek?

cevap

15

rvest kodunuz değiştirilen formu saklamıyor, örneðin örneðin, yalnýzca orijinal pgform doldurulmasý gereken deðerler olmadan gönderiyorsunuz.

library(rvest) 

url  <-"http://www.perfectgame.org/" ## page to spider 
pgsession <-html_session(url)    ## create session 
pgform <-html_form(pgsession)[[1]]  ## pull form from session 

# Note the new variable assignment 

filled_form <- set_values(pgform, 
    `ctl00$Header2$HeaderTop1$tbUsername` = "[email protected]", 
    `ctl00$Header2$HeaderTop1$tbPassword` = "mypassword") 

submit_form(pgsession,filled_form) 

Ve şimdi yerine bir hata güzel 200 durum kodu yanıtı bakın: deneyin. İstenilen gönderme düğmesinin ilk gönderme düğmesi olduğu için, bir argüman olarak vermemize gerek olmadığını, aksi halde sadece bir dize vereceğimizi (düz tırnak, geri tırnak değil) unutmayın.

+0

Merhaba, cevabınız için çok teşekkürler - çözümünüzden, doldurulmuş formu R'de bir nesne olarak kaydetmek yerine oturuma kaydetmek zorunda olduğunuzu şimdi anlıyorum. Ancak, 200 durum kodunuzu çoğaltamam gibi görünmüyor - Yukarıdaki kodu çalıştırıyorum ve yukarıda listelenen aynı hatayı alıyorum. "Ile gönderme" ctl00 $ Header2 $ HeaderTop1 $ Button1 ' İşlevde hata (type, msg, asError = TRUE): malformed " Aradaki fark ne olabilir? – gbostock

+0

DÜZENLEME: En yeni R (3.1.3) sürümüne yükledim ve aynı mesajı aldım. Teşekkürler! Bir göz atacağım ve rapor vereceğim. – gbostock

+0

Bu mükemmel bir şekilde çalıştı. Tekrar teşekkürler! – gbostock

İlgili konular