我正在尝试使用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)。我可以通过两种方式做到这一点:
我尝试了两种方法,但没有奏效。我得到的“最好”结果是:
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年)(这是我最好的结果,因为它是唯一能做某事的人:()
所以,问题是:我该如何解决这个问题?
答案 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()