gpt4 book ai didi

javascript - RSelenium 和 Javascript

转载 作者:行者123 更新时间:2023-11-29 10:13:51 25 4
gpt4 key购买 nike

我相当精通 R,但对 javaScript 和其他语言一无所知。我想访问有关此公开数据集 (http://fyed.elections.on.ca/fyed/en/form_page_en.jsp) 的信息。特别是,我在数据框中列出了数千个形式为 ('A1A1A1') 的邮政编码。我想将这些邮政编码中的每一个提交到该网站,然后提取返回的选区名称。 RSelenium 看起来很理想,但我不知道如何让 javascript 工作。我正在使用 Mac OS 10.9.5,R 3.0.3 和 RSelenium_1.3。 Firefox 是 v.33,Selenium 是 2.44。以下脚本有效。

require(RSelenium)
checkForServer()
startServer()
remDr<-remoteDriver()
remDr$open()
remDr$getStatus()
remDr$navigate("http://fyed.elections.on.ca/fyed/en/form_page_en.jsp")

#After inspecting the source code, you can see the input box has the id 'pcode', for postal code
webElem<-remDr$findElement(using = 'id', value = "pcode")
webElem$getElementAttribute('id')

#This is where I am stuck
remDr$executeScript(script='arguments[0].click(m1p4v4)', list(webElem))

#Utlimately, I have a list of several thousand postal codes, so I would like to create a loop through to extract all the district names that are stored on the pages that are returned with a successful javascript (see previous command). Three real postal codes that return results are as follows:
p.codes<-c('m1p4v4', 'n3t2y3', 'n2h3v1')

我觉得我只是不理解必要的 javascript 命令或 executeScript 的语法来完成这项工作。如果有任何帮助,我将不胜感激。

最佳答案

你不需要在这里使用executeScript:

require(RSelenium)
checkForServer()
startServer()
remDr<-remoteDriver()
remDr$open()
remDr$getStatus()
remDr$navigate("http://fyed.elections.on.ca/fyed/en/form_page_en.jsp")

p.codes<-c('m1p4v4', 'n3t2y3', 'n2h3v1')
webElem<-remDr$findElement(using = 'id', value = "pcode")
webElem$sendKeysToElement(list(p.codes[1])) # send the first post code to the element

remDr$findElement("id", "en_btn_arrow")$clickElement() # find the submit button and click it

如果您想使用 executeScript 代替,您可以将最后一行替换为:

remDr$executeScript("arguments[0].click();"
, list(remDr$findElement("id", "en_btn_arrow")))

executeScript 将脚本作为参数和列表。如果列表中的任何元素属于类webElement 然后它们可以在脚本中像 DOM 元素一样被引用。在这种情况下,第一个元素(JavaScript 中的零索引)是一个 webElement 并且我们要求在我们的 JavaScript 中单击它。

此外,如果你检查按钮背后的源代码,你会发现当它被按下时它会调用 document.pcode.submit() 所以在这种情况下如果你想使用 就更简单了executeScript 你可以这样做:

remDr$executeScript("document.pcode.submit();")

关于javascript - RSelenium 和 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27109267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com