403 ошибка при использовании Rvest для входа на веб-сайт для очистки

Я пытаюсь очистить страницу на веб-сайте, который требует входа в систему, и я добровольно получаю ошибку 403.

Я изменил код из этих 2 сообщений для моего сайта,использование rvest или httr для входа в нестандартные формы на веб-странице и как повторно использовать сеанс, чтобы избежать повторного входа при очистке с помощью rvest?

library(rvest)
pgsession <- html_session("https://www.optionslam.com/earnings/stocks/MSFT?page=-1")
pgform <- html_form(pgsession)[[1]]
filled_form <- set_values(pgform, 'username'='user', 'password'='pass')
s <- submit_form(pgsession, filled_form) # s is your logged in session

когда код запущен, я получаю это сообщение:

Submitting with 'NULL'
Warning message:
In request_POST(session, url = url, body = request$values, encode = request$encode,  :
  Forbidden (HTTP 403).

Я также запустил код таким образом, обновление user_agent как R. S. предложил в комментариях, однако, я получаю ту же ошибку, что и выше.

library(rvest)
library(httr)
uastring <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"
pgsession <- html_session("https://www.optionslam.com/earnings/stocks/MSFT?page=-1", user_agent(uastring))
pgform <- html_form(pgsession)[[1]]
filled_form <- set_values(pgform, 'username'='user', 'password'='pass')
s <- submit_form(pgsession, filled_form) # s is your logged in session

Если вы вытащите страницу без входа в систему, она покажет вам немного таблицы данных в правом нижнем углу под текстом: "доступные события заработка: 65"

после входа в систему он покажет все 65 событий, и таблица будет заполнена, что я хочу загрузить. У меня есть весь код, необходимый для этого на месте, но я застрял только на логине часть.

Спасибо за помощь.

2 ответов


используя предложение Р. С., Я RSelenium для входа в систему.

краткое примечание для других пользователей mac при использовании chrome или phantom. Я запускаю El Capitan, поэтому у меня была проблема с тем, чтобы mac распознал пути к обоим файлам bin. Вместо этого я переместил файлы bin в /usr/local/bin, и они работали без проблем.

Ниже приведен код для этого:

library(RSelenium)
RSelenium::startServer()
remDr <- remoteDriver(browserName = "chrome")
remDr$open()
appURL <- 'https://www.optionslam.com/accounts/login/'
remDr$navigate(appURL)
remDr$findElement("id", "id_username")$sendKeysToElement(list("user"))
remDr$findElement("id", "id_password")$sendKeysToElement(list("password", key='enter'))

appURL <- 'https://www.optionslam.com/earnings/stocks/MSFT?page=-1'
remDr$navigate(appURL)

Это также можно сделать с phantom,

library(RSelenium)

pJS <- phantom() # start phantomjs

appURL <- 'https://www.optionslam.com/accounts/login/'
remDr <- remoteDriver(browserName = "phantomjs")
remDr$open()
remDr$navigate(appURL)
remDr$findElement("id", "id_username")$sendKeysToElement(list("user"))
remDr$findElement("id", "id_password")$sendKeysToElement(list("password", key='enter'))

appURL <- 'https://www.optionslam.com/earnings/stocks/MSFT?page=-1'
remDr$navigate(appURL)

вот ответ, чтобы решить проблему в исходном случае использования с rvest:

   library(rvest)
   library(httr)
   uastring <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"

   pgsession <- html_session("https://www.optionslam.com/earnings/stocks/MSFT?page=-1", user_agent(uastring))

   pgform <- html_form(pgsession)[[1]]

   filled_form <- set_values(pgform,
                             username = 'un',
                             password = 'ps')

   s <- submit_form(pgsession, filled_form, submit = NULL, config(referer = pgsession$url)) # s is your logged in session

запрошенное требует знания страницы, с которой Вы пришли (referer(sic)).

config(referer = pgsession$url)