2016-09-01 1 views
2

내 환상의 리그에 액세스하려면 R을 사용하여 Yahoo에 로그인하려고합니다. 코리의 코드를 Yahoo login using rvest에 올리고 있지만 성공하지 못했습니다. 나는 다음과 같은 오류 얻을 형태로 제출하려고 할 때 :R 및 rvest와 Yahoo 로그인

 <button submit> 'signin 

제출 버튼 이름에 대한 닫는 물결이 없습니다 : 나는 다음과 같은주의 변수 myForm을 검사시

Error: Unknown submission name 'signin'. Possible values: passwd

합니다. 제출 버튼이 인식되지 않는 원인이 될 수 있습니까?

또한 사용자 이름/전화 확인 방법 대신 사용자 이름/암호를 사용하고 있습니다.

하나만 제출할 수 있습니까? 로그인 양식에서 "다음"버튼을 누를 때마다 첫 번째와 두 번째 페이지가 동일하며 yahoo는 단순히 사용자 이름 필드를 숨 깁니다. 여기

은 주석 라인 @cory의 원래 코드에 있었던 부호 @의 Dave2e

library(rvest) 
username <- "xxxx" 
passwd <- "xxxxxx" 
league_id <-"yyyyyyy" 

uastring <- "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 
url <- "http://football.fantasysports.yahoo.com/f1/" 
url <- paste0(url, league_id,"/players") 
s <- rvest::html_session(url, httr::user_agent(uastring)) 
myform <- rvest::html_form(s)[[1]] 
myform <- rvest::set_values(myform, username=username) 
# s <- suppressWarnings(rvest::submit_form(s, myform, submit="signin")) 
s <- rvest::submit_form(s, myform, submit="signin") 

이다.

+0

클릭 동작을 조작하기 위해 셀렌 드라이버를 사용해 보시지 않겠습니까? – amrrs

+0

시도하는 코드를 게시하면 이전 게시물을 다시 참조하는 것과는 대조적으로 도움이됩니다. – Dave2e

+0

@ amrrs에 답하면 셀레늄에 대해 알지 못하고 스스로를 가르치려고합니다. R. 방금 배울 수있는 흥미로운 항목으로 환상적인 풋볼 리그를 골랐습니다. – Pepebuho

답변

1

그 이후로 코드를 변경해야했습니다. 나는 야후가 제출 단추 또는 다른 것을 변경했다고 생각합니다 ... 한 가지주의 할 점이 있습니다. 때때로 두 번 실행해야합니다. 이유는 모르겠지만 때로는 처음 실행할 때 오류가 발생하지만 두 번째에는 작동합니다.

또한 package on github에 입력했습니다. devtools::install_github("corynissen/yahooFantasySports")을 통해 설치할 수 있습니다. 거기에는 두 가지 기능 만 있습니다. 하나는 로그인하고 다른 하나는 각 위치의 축구 선수 목록을 다운로드하는 것입니다. 나는 나의 환상 초안 준비를 위해 그것을 사용했다.

login <- function(league_id, username){ 
    if(nchar(league_id)!=6){stop("league_id must be six characters")} 
    if(!is.character(username)){stop("username must be a character string")} 

    uastring <- "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 
    url <- "http://football.fantasysports.yahoo.com/f1/" 
    url <- paste0(url, league_id) 

    s <- rvest::html_session(url, httr::user_agent(uastring)) 
    myform <- rvest::html_form(s)[[1]] 
    myform <- rvest::set_values(myform, username=username) 
    #s <- suppressWarnings(rvest::submit_form(s, myform, submit="signin")) 
    s <- suppressWarnings(rvest::submit_form(s, myform)) 
    s <- rvest::jump_to(s, s$response$url) 
    myform <- rvest::html_form(s)[[1]] 
    if("code" %in% names(myform$fields)){ 
    code <- readline(prompt="In your Yahoo app, find and click on the Account Key icon.\nGet the 8 character code and\nenter it here: ") 
    }else{ 
    print("Unable to login") 
    return(NULL) 
    } 
    myform <- rvest::set_values(myform, code=code) 
    s <- suppressWarnings(rvest::submit_form(s, myform, submit="verify")) 
    if(grepl("authorize\\/verify", s$url)){ 
    print("Wrong code entered, unable to login") 
    return(NULL) 
    }else{ 
    print("Login successful") 
    } 
    s <- rvest::jump_to(s, s$response$url) 
    return(s) 
} 
+0

감사! 그것은 매력처럼 작동했습니다. 전화로 계정 로그인을 변경해야했습니다. 사용자/패스 작업을 사용하여 변경 작업을 수행 할 수 없습니다. 더 공부해야합니다. 또한 플레이어 데이터를 가져 오는 함수에 몇 가지 요소를 추가해야했습니다. bye 주 헤더를 추가하고 s_S를 S_PS로 변경하여 지난 시즌 결과 대신 예상을 선택하십시오. – Pepebuho