小编LWR*_*RMS的帖子

R - 查找包含所有字符串/模式的所有向量元素 - str_detect grep

样本数据

files.in.path = c("a.4.0. name 2015 - NY.RDS", 
                  "b.4.0. name 2016 - CA.RDS", 
                  "c.4.0. name 2015 - PA.RDS")
strings.to.find = c("4.0", "PA")
Run Code Online (Sandbox Code Playgroud)

我想要显示包含所有元素的逻辑向量strings.to.find。结果想要:

FALSE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)

此代码将查找包含以下任何一项的元素strings.to.find,即,使用 OR 运算符

str_detect(files.in.path, str_c(strings.to.find, collapse="|")) # OR operator
 TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)

此代码尝试使用 AND 运算符但不起作用。

str_detect(files.in.path, str_c(strings.to.find, collapse="&")) # AND operator
FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

这在几行中有效,我可以编写一个for循环,该循环将为具有大量strings.to.find

det.1 = str_detect(files.in.path,      "4.0"  )   
det.2 = str_detect(files.in.path,      "PA"  )   
det.all = det.1 & det.2
 FALSE FALSE  TRUE
Run Code Online (Sandbox Code Playgroud)

但是有没有更好的方法不涉及使用依赖于strings.to.find.

r and-operator stringr grepl

4
推荐指数
2
解决办法
5716
查看次数

R - Rselenium - setImplicitWaitTimeout 在 Selenium Server 3.5.3 中给出错误

当使用 Selenium Server 3.4.0 和 Gecko Driver v0.18 时,此 Rselenium 命令有效。

remDr$setImplicitWaitTimeout(milliseconds = 15000)      
Run Code Online (Sandbox Code Playgroud)

这是相关的代码块:

remDr <- remoteDriver()
remDr$open(silent = TRUE)   
remDr$setImplicitWaitTimeout(milliseconds = 15000)       
Run Code Online (Sandbox Code Playgroud)

但是,当使用 Gecko v0.18 或 v0.19 运行 Selenium Server 3.5.3 时,相同的代码会生成以下错误:

Selenium message:POST /session/91a1f43f-18b3-4e11-92a9-d738cd4049a4/timeouts/implicit_wait did not match a known command
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:54:15.039Z'
System info: host: 'pc', ip: 'xxx.xxx.x.x', os.name: 'Windows 10', os.arch: 'x86', os.version: '10.0', java.version: '1.8.0_144'
Driver info: driver.version: unknown

Error:   Summary: UnknownCommand
 Detail: The requested resource could not be …
Run Code Online (Sandbox Code Playgroud)

selenium r selenium-webdriver rselenium

4
推荐指数
1
解决办法
2984
查看次数

R - Rselenium - 使用 = 'id' 导航下拉菜单/列表/框

如何通过“ using = 'id' ”导航动态下拉列表(例如,remDr$findElement(using='id', value="main_ddYear")

我可以找到并点击使用findElement。单击后,我可以发送“向下箭头”键(击键)和“输入”,如果我知道我的目标选择向下有多少箭头。

页面源示例

<select name="main$ddYear" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;main$ddYear\&#39;,\&#39;\&#39;)&#39;, 0)" id="main_ddYear" class="groupTextBox">
<option selected="selected" value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
<option value="2014">2014</option>
<option value="2013">2013</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我想做一些类似于这篇文章中的解决方案,但使用 'id' 而不是 'xpath' 。我无法适应 xpath 解决方案。

Java 中的另一个解决方案使用了“Select”类,我在快速入门教程文档中没有找到该类。

我将发布一个关于如何刮取选项/值下拉列表的单独问题。

xpath r drop-down-menu rselenium

2
推荐指数
1
解决办法
2330
查看次数

Rselenium - 如何抓取所有下拉列表选项值

如何使用 Rselenium 抓取下拉列表中的所有选项值?

页面源示例:

<select name="main$ddArea" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;main$ddArea\&#39;,\&#39;\&#39;)&#39;, 0)" id="main_ddArea" class="groupTextBox">
<option selected="selected" value="95182">Area 1</option>
<option value="95183">Area 2</option>
<option value="95184">Area 3</option>
<option value="95185">Area 4</option>
<option value="95186">Area 4</option>
</select>
Run Code Online (Sandbox Code Playgroud)

想要的结果是一个向量,每个值作为一个元素。例如, values = c("95182", "95183", "95184", "95185", "95186")

获取一串值也可能有效,因为它可以拆分为元素,例如,使用 strsplit。

带有“值”或“选项”的 getElementAttribute() 不起作用。例如,

dd.areas = remDr$findElement(using='id', value="main_ddArea")
dd.areas$getElementAttribute('option')
Run Code Online (Sandbox Code Playgroud)

或者

dd.areas$getElementAttribute('value')
Run Code Online (Sandbox Code Playgroud)

getElementText()查找文本的一个字符串,例如 "Area 1 /n Area 2 /n Area 3 /n...." 。但是以后不能使用该文本来导航下拉列表。换句话说,当使用 导航下拉列表时$findelement(),需要一个值来填充下拉列表;文本不起作用。

包文档似乎并没有包含对下拉列表也不做的小插曲

r drop-down-menu rselenium

2
推荐指数
1
解决办法
1274
查看次数