首页 > 解决方案 > RSelenium:为什么我不能向这个(Java?)登录字段发送密码?

问题描述

我正在尝试使用 RSelenium抓取该网站。向其他元素发送文本有效,但登录字段让我抓狂。我认为这可能是因为它在 Java 中(至少 SelectorGadget 中的 css 选择器说 .j_username 和 .j_password),但我似乎无法弄清楚如何处理它。

我不介意手动登录,但我也不知道它是如何工作的=)。

remDr <- RSelenium::remoteDriver(remoteServerAddr = "localhost",
                                     port = 4445L,
                                     browserName = "chrome")
    remDr$open()

remDr$navigate("https://smd.ch/SMDView/log/index.jsp")
login_name <- remDr$findElement(using = "xpath", "//*[contains(concat( ' ', @class, ' ' ), concat( ' ', 'j_username', ' ' ))]")
login_name$clickElement()
login_name$clearElement()
login_name$clickElement()
login_name$sendKeysToElement(list("xxxxxxx"))
login_pw <- remDr$findElement(using = "xpath", "//*[contains(concat( ' ', @class, ' ' ), concat( ' ', 'j_password', ' ' ))]")
login_pw$click()
login_pw$clearElement()
login_name$click()
login_pw$sendKeysToElement(list("xxxxxxx", "\uE007"))
remDr$screenshot(display = TRUE)

标签: javardockerselenium

解决方案


该页面包含多个登录,至少一个用于移动设备,一个用于桌面。根据模拟的屏幕大小/用户代理,只有一个登录是可见的,另一个是不可见的。要获取桌面登录名,请使用以下 xpath 表达式:

//*/div[@class='login_screen']//*[contains(@class,'j_username')
//*/div[@class='login_screen']//*[contains(@class,'j_password')

测试 xPath 表达式的一般提示:在 Google Chrome 中打开要抓取的网页,打开开发人员工具,切换到控制台选项卡。然后输入:$x("XPATH"),将 XPATH 替换为您要测试的 XPath 表达式并按 Enter。Chrome 会向您显示活动网页的结果,您甚至可以单击它们,Chrome 会突出显示结果(如果它们不可见)。在代码中使用它们之前以这种方式测试 XPath 表达式可以节省大量时间 ;-)


推荐阅读