java - 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)
解决方案
该页面包含多个登录,至少一个用于移动设备,一个用于桌面。根据模拟的屏幕大小/用户代理,只有一个登录是可见的,另一个是不可见的。要获取桌面登录名,请使用以下 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 表达式可以节省大量时间 ;-)
推荐阅读
- android - 显示 AlertDialog 时暂停活动
- javascript - 如何制作搜索产品描述的表格或数组并显示相应代码的搜索功能
- websphere-8 - 我想将一个简单的 REST API 部署到 websphere 应用程序服务器
- sql - 使用案例语句的不同项目计数
- c# - 图表点/标记 c# 的放置
- python - 在一组元组中找到最小值时如何忽略负数?
- microsoft-teams - 在 Microsoft Teams 中从选项卡内重定向到另一个选项卡失败
- c++ - 在使用复制构造函数和赋值时生成警告
- node.js - Docker 节点实例无法运行 gulp 命令,找不到模块“strip-ansi”
- node.js - Angular 7 SSR 和 Firebase 部署