【问题标题】:Unable To Fill Form Using RSelenium, Unable To Locate Element无法使用 RSelenium 填写表单,无法找到元素
【发布时间】:2018-03-12 17:04:48
【问题描述】:

我正在尝试填写登录表单。

这是重现错误的代码:

library(RSelenium)
require(XML)

RSelenium::startServer()
remDr <<- remoteDriver()
remDr$open()

appURL <- "https://www.schwab.com/public/schwab/nn/login/login.html&lang=en"
remDr$navigate(appURL)

remDr$findElement("id", "LoginId")$sendKeysToElement(list("username"))

这是收到的错误消息: Selenium message:Unable to locate element: #LoginId

我尝试过使用 xpath 和 css 得到相同的结果。我相信这个问题与使用框架的页面有关,因此 remDr 无法“看到”登录框。

然后我运行这段代码:

webElem <- remDr$findElements(value = "//iframe")
sapply(webElem, function(x){x$getElementAttribute('name')})
[[1]]
[1] "loginIframe"

[[2]]
[1] ""


remDr$switchToFrame(1)
remDr$findElement("id", "LoginId")$sendKeysToElement(list("username"))

收到相同的错误消息: Selenium message:Unable to locate element: #LoginId

关于如何让远程浏览器找到登录框有什么建议吗?

谢谢。

【问题讨论】:

    标签: r selenium selenium-webdriver web-scraping rselenium


    【解决方案1】:

    你是对的 - 这是框架的问题。下面的代码对我有用。

    iframe <- remDr$findElement("xpath", "*//iframe[@id = 'loginIframe']")
    remDr$switchToFrame(iframe)
    remDr$findElement("id", "LoginId")$sendKeysToElement(list("username"))
    

    【讨论】:

    • 你怎么知道那是 xpath 的正确语法?我获得css和xpath的方法是右键单击一个元素,单击检查,然后firefox和chrome都允许我复制xpath或css。由于 iframe 在“查看源代码”中不可见,因此无需右键单击然后复制。谢谢。
    • 主要是反复试验,但我使用w3schools.com/xml/xpath_syntax.asp 获得了一些基本知识。我建议您也查看 contains() 命令。这真的很有帮助。最后,检查代码的一种简单方法是使用 Rselenium 中的 $highlightElement()。如果网站上的正确元素突出显示,那么你就是金子。
    • 感谢 TTR 的提示。
    • 非常相似,但用于 xpath 到例如选择具有特定 css 选择器的节点,而不必担心该节点是否还有其他选择器。你可以阅读一下here
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2019-07-23
    • 2021-06-23
    • 2020-08-28
    • 1970-01-01
    • 2019-12-08
    • 2020-06-14
    相关资源
    最近更新 更多