使用RSelenium检查多个复选框

时间:2016-02-11 13:10:07

标签: r selenium

我正在尝试使用RSelenium从this website下载电子表格。我制作的第一个代码是:

remDr <- remoteDriver()
remDr$open()
remDr$navigate("http://observatorios.dieese.org.br/ws/tabela/porto-alegre/bairros/numero-de-estabelecimentos-formais-por-grande-setor-de-atividade-economica")
remDr$executeScript("return baixarArquivo(1)")

它有效!但我想下载整个数据(即所有年份),所以我需要检查年份复选框(Filtros - &gt; Anos)。我可以通过两种方式做到这一点:

  1. 选中“Ano(s)”复选框,并自动选择所有年份
  2. 手动选择所有年份
  3. 我尝试了两种方法,但没有奏效。我得到的“最好”结果是:

    remDr <- remoteDriver()
    remDr$open()
    remDr$navigate("http://observatorios.dieese.org.br/ws/tabela/porto-alegre/bairros/numero-de-estabelecimentos-formais-por-grande-setor-de-atividade-economica")
    webElem <- remDr$findElement(using = 'id', value = 'anos')
    remDr$executeScript("visualizar('filtros', true)")
    remDr$executeScript("visualizarAnos()")
    chkbox <- remDr$findElement(using = 'xpath', "//input[@name='inputAno'][@type='checkbox']")
    chkbox$clickElement()
    remDr$executeScript("return submeter()")
    remDr$executeScript("return baixarArquivo(1)")
    

    但这取消了第一年(2012年)(这是我最好的结果,因为它是唯一能做某事的人:()

    所以,问题是:我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在您的最佳结果尝试中,您试图获取anos中的所有复选框,但正在调用findElement。这就是为什么只有点击2012的原因,因为findElement正在返回它可以找到满足你的xpath //input[@name='inputAno'][@type='checkbox']的第一个元素。

您可以使用findElements来修复解决方案:

sapply
(
    remDr$findElements(using = 'xpath', "//input[@name='inputAno'][@type='checkbox']"),
    function(element){ element$clickElement() }
)

或者,您可以使用css选择器搜索全选复选框,然后单击:

selectAll <- remDr$findElement(using = 'css selector', '#anos > #alternar')
selectAll$clickElement()