【问题标题】:R: Select drop down option with RSeleniumR:使用 RSelenium 选择下拉选项
【发布时间】:2020-11-20 17:21:51
【问题描述】:

我正在做一个网络抓取项目,我是 RSelenium 的新手,需要帮助从下拉列表中选择一个值。我浏览了帖子,发现从下拉列表中进行选择时使用 Xpath 非常方便。我能够编写一些似乎正在激活从下拉菜单中单击的代码,如下所示,但我不知道如何实际强制从特定菜单选项(例如,当前标题)中进行选择。

webElem <- remDr$findElement(using = 'xpath', value = "//*[@data-v-106f7212='']")
webElem$clickElement()

我想指出,当我从下拉菜单中实际进行选择时,第一个 div 括号中的 class="searchCategorySelect" 会更改为 class="searchCategorySelect catSelected"。此括号中的标题值也会随着 &lt;span class="searchCategorySelectLabel"...&gt; 括号中的值而变化。我用下面的例子说明了这些变化。

我使用来自this 帖子的这个答案作为我代码的灵感。此示例中的网页抓取代码通过使用 Xpath 并选择包含所选季节的 data-option-name 来选择季节。我页面中的 HTML 不是以这种方式构建的,鉴于我的 HTML 结构,我一直在思考如何使用 RSelenium 有效地进行选择。

任何建议或帮助都会非常有用和感激。

默认值:

<div class="searchCategorySelect" data-v-106f7212="" data-v-c62fe6f4="" title="All Resources">
 <select class="srselect srselectTopbar" data-v-106f7212="" aria-label="Select Search Category">
   <option class="" data-v-106f7212="" value="CurrentSrTitle">Current Title</option>
   <option class="" data-v-106f7212="" value="All">All Resources</option> 
   <option class="" data-v-106f7212="" value="Images">Images</option>
   <option class="" data-v-106f7212="" value="Dictionary">Dictionary</option>
   <option class="" data-v-106f7212="" value="Media">Media</option>
   <option class="" data-v-106f7212="" value="Alerts">Alerts</option>
   <option class="" data-v-106f7212="" value="News">News</option>
   <option class="" data-v-106f7212="" value="EBMcalc">EBMcalc</option>
   <option class="" data-v-106f7212="" value="Help">Help</option>
 </select> 
<div class="searchCategorySelectVisual" data-v-106f7212="" role="presentation">
  <span class="searchCategorySelectLabel" data-v-106f7212="">All Resources</span> 
  <span class="triangleGlyph" data-v-106f7212="">
   <svg class="vsvg" data-v-887bca16="" data-v-106f7212="" focusable="false" aria-label="" role="presentation" aria-hidden="true">
     <use data-v-887bca16="" xlink:href="#white_triangle2" role="presentation"></use> 
     <!----> 
     <!---->
   </svg>
  </span>
 </div>
</div>

做出选择时:

<div class="searchCategorySelect catSelected" data-v-106f7212="" data-v-c62fe6f4="" title="Current Title">
 <select class="srselect srselectTopbar" data-v-106f7212="" aria-label="Select Search Category">
   <option class="" data-v-106f7212="" value="CurrentSrTitle">Current Title</option>
   <option class="" data-v-106f7212="" value="All">All Resources</option> 
   <option class="" data-v-106f7212="" value="Images">Images</option>
   <option class="" data-v-106f7212="" value="Dictionary">Dictionary</option>
   <option class="" data-v-106f7212="" value="Media">Media</option>
   <option class="" data-v-106f7212="" value="Alerts">Alerts</option>
   <option class="" data-v-106f7212="" value="News">News</option>
   <option class="" data-v-106f7212="" value="EBMcalc">EBMcalc</option>
   <option class="" data-v-106f7212="" value="Help">Help</option>
 </select> 
<div class="searchCategorySelectVisual" data-v-106f7212="" role="presentation">
  <span class="searchCategorySelectLabel" data-v-106f7212="">Current Title</span> 
  <span class="triangleGlyph" data-v-106f7212="">
   <svg class="vsvg" data-v-887bca16="" data-v-106f7212="" focusable="false" aria-label="" role="presentation" aria-hidden="true">
     <use data-v-887bca16="" xlink:href="#white_triangle2" role="presentation"></use> 
     <!----> 
     <!---->
   </svg>
  </span>
 </div>
</div>

【问题讨论】:

    标签: r xpath web-scraping drop-down-menu rselenium


    【解决方案1】:

    我无法测试答案,因为我没有 url,但通常,当我必须从列表中选择一个元素时,我会这样做:

    你可以这样创建一个xpath:

    "//*/option[@value='Images']"
    
    ...
    
    "//*/option[@value='Help']"
    

    这可能是工作

    remDr$findElement(using = 'xpath', value = "//*/option[@value='Images']")$clickElement()
    

    但它不应该起作用,可能您必须先单击(激活)该框才能选择一个元素(as in this answer)。

    如果您提供网址,我可以完成我的答案并检查它。

    【讨论】:

    • 该网站需要从临床机构登录,因此大多数人无法访问该网页。不过你的回答奏效了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多