代码之家  ›  专栏  ›  技术社区  ›  denis

如何更改窗体中的单选按钮值

  •  1
  • denis  · 技术社区  · 5 年前

    我正在使用 rvest 我正在培训TripAdvisor。我无法将单选按钮设置为正确的值以获得所有评论:

    library(rvest)
    url <- "https://www.tripadvisor.com/Restaurant_Review-g187438-d12699400-Reviews-Trattoria_Mamma_Franca-Malaga_Costa_del_Sol_Province_of_Malaga_Andalucia.html"
    session <- html_session(url)
    pgform <- html_form(session)[[3]]
    

    它给出了形式

    <form> 'taplc_location_review_filter_controls_0_form' (POST /SetReviewFilter#REVIEWS)
      <input checkbox> 'filterRating': 5
      <input checkbox> 'filterRating': 4
      <input checkbox> 'filterRating': 3
      <input checkbox> 'filterRating': 2
      <input checkbox> 'filterRating': 1
      <input hidden> 'filterRating': 
      <input checkbox> 'filterSegment': 3
      <input checkbox> 'filterSegment': 2
      <input checkbox> 'filterSegment': 5
      <input checkbox> 'filterSegment': 1
      <input checkbox> 'filterSegment': 4
      <input hidden> 'filterSegment': 
      <input checkbox> 'filterSeasons': 1
      <input checkbox> 'filterSeasons': 2
      <input checkbox> 'filterSeasons': 3
      <input checkbox> 'filterSeasons': 4
      <input hidden> 'filterSeasons': 
      <input radio> 'filterLang': ALL
      <input radio> 'filterLang': en
      <input radio> 'filterLang': es
      <input radio> 'filterLang': it
      <input radio> 'filterLang': fr
      <input radio> 'filterLang': nl
      <input radio> 'filterLang': ru
      <input radio> 'filterLang': sv
      <input radio> 'filterLang': da
      <input radio> 'filterLang': de
      <input radio> 'filterLang': no
      <input radio> 'filterLang': pl
      <input radio> 'filterLang': pt
      <input hidden> 'returnTo': #REVIEWS
    

    我想坐 filterLang ALL

    filledform <- set_values(pgform,
                             filterLang = "ALL")
    submit_form(session,filledform)
    

    给了我错误:

    Error: Could not find possible submission target.
    

    我应该使用什么提交?我能用服务器吗,还是我应该试试 this ?

    1 回复  |  直到 5 年前
        1
  •  1
  •   martin_joerg    5 年前

    您收到的错误消息与单选按钮无关,而与您试图提交的表单缺少 submit 按钮 rvest 尝试提交表单时需要。

    作为示例的解决方法,您可以更改字段的字段类型 returnTo 提交 并将其值设置为页面本身的URL,如下所示:

    pgform$fields[['returnTo']]$type = 'submit'
    pgform$fields[['returnTo']]$value = url
    

    然后您可以按预期设置语言选项,例如

    filledform <- set_values(pgform, filterLang = 'it')
    

    filledform <- set_values(pgform, filterLang = 'ALL')
    

    应分别将语言过滤器设置为意大利语或所有语言。

    如前所述 here ,当你这样做的时候

    url <- 'https://www.tripadvisor.com/Restaurant_Review-g187438-d12699400-Reviews-Trattoria_Mamma_Franca-Malaga_Costa_del_Sol_Province_of_Malaga_Andalucia.html'
    session <- html_session(url)
    pgform <- html_form(session)[[3]]
    pgform$fields[['returnTo']]$type = 'submit'
    pgform$fields[['returnTo']]$value = url
    filledform <- set_values(pgform, filterLang = 'ALL')
    result <- submit_form(session, filledform)
    

    您宁愿得到整个页面,而只得到使用以下代码的内容

    url <- 'https://www.tripadvisor.com/Restaurant_Review-g187438-d12699400-Reviews-Trattoria_Mamma_Franca-Malaga_Costa_del_Sol_Province_of_Malaga_Andalucia.html'
    session <- html_session(url)
    pgform <- html_form(session)[[3]]
    pgform$fields[['returnTo']]$type = 'submit'
    pgform$fields[['returnTo']]$value = url
    filledform <- set_values(pgform, filterLang = 'ALL')
    result <- submit_form(session, filledform, submit = NULL, httr::add_headers('x-requested-with' = 'XMLHttpRequest'))
    

    因为你正试图与一个相当复杂的网站进行交互,而这个网站大量使用了javascript和 XMLHttpRequest 你最好从 紧身衣 更好地支持此类技术的方法,例如 RSelenium .