【问题标题】:Checking multiple checkbox with RSelenium使用 RSelenium 检查多个复选框
【发布时间】:2016-02-11 13:10:07
【问题描述】:

我正在尝试使用 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 -> Anos)。我可以通过两种方式做到这一点:

  1. 选中“Ano(s)”复选框,并自动选择所有年份
  2. 手动选择所有年份

两种方法我都试过了,但没有奏效。我得到的“最佳”结果是:

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 年)(这是我最好的结果,因为它是唯一做某事的人:()

那么,问题是:我该如何解决这个问题?

【问题讨论】:

    标签: r selenium


    【解决方案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()
    

    【讨论】:

    • 我输了整个上午就因为一个's'?! :(谢谢老兄!
    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2023-03-09
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多