2017-07-23 72 views
2

我正嘗試使用RSelenium與幻像登錄到網站mol.medicover.pl。 我無法發送登錄並使用sendKeysToElement命令傳遞 我認爲問題在於強制幻像接受sslcerts。 我的代碼:使用phantomjs與Rselenium的Sendkeys

library(RSelenium) 
my_extra <- list("--ignore-ssl-errors=true", "--ssl-protocol=tlsv1", "--web-security=no") 
cDrv3 <- RSelenium::rsDriver(port = 4569L, browser = "phantomjs", 
       extraCapabilities = my_extra) 
remDr <- cDrv3[["client"]] 
remDr$navigate("https://mol.medicover.pl") 
log_into <- remDr$findElement(using = "xpath", "//*[@id=\"oidc-submit\"]") 
log_into$clickElement() 
windows_list <- remDr$getWindowHandles() 
remDr$closeWindow() 
remDr$switchToWindow(windows_list[[2]]) 
card_number <- remDr$findElement(using = "xpath", "//*[@id=\"username-email\"]") 
card_number$sendKeysToElement(list("test", key = "enter")) 

最後一行代碼後,我得到一個錯誤:

Selenium message:TypeError - undefined is not a function 
(evaluating _getTagName(currWindow).toLowerCase()') 
Command duration or timeout: 9 milliseconds 
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown' 
System info: host: 'kacper-Lenovo-ideapad-Y700-15ISK', ip: '127.0.1.1', 
os.name: 'Linux', os.arch: 'amd64',os.version: '4.8.0-58 
generic',java.version: '1.8.0_131' 
Driver info: org.openqa.selenium.phantomjs.PhantomJSDriver 
Capabilities [{applicationCacheEnabled=false, rotatable=false, 
handlesAlerts=false, databaseEnabled=false, version=2.1.1, platform=LINUX, 
browserConnectionEnabled=false, proxy=Proxy(direct), nativeEvents=true, 
acceptSslCerts=false, driverVersion=1.2.0, locationContextEnabled=false, 
webStorageEnabled=false, browserName=phantomjs, takesScreenshot=true, 
driverName=ghostdriver, javascriptEnabled=true, cssSelectorsEnabled=true}] 
Session ID: c0a7edf0-6fc9-11e7-ba6e-a34a400bb453 

Error: Summary: UnknownCommand 
Detail: The requested resource could not be found, or a request was 
received using an HTTP method that is not supported by the mapped resource. 
class: org.openqa.selenium.UnsupportedCommandException 
Further Details: run errorDetails method 

我試着用wdman包開始Rselenium但我同樣的問題疊加

cDrv <- phantomjs(extras = "--ignore-ssl-errors=true --ssl-protocol=any 
--web-security=no", port =4565L, version = "1.9.8") 
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4565, 
browserName = "phantomjs") 
remDr$open() 

所有時間我開始我的會議我得到$ acceptSslCerts = FALSE。我不知道如何強制phantomjs來改變它。

[1] "Connecting to remote server" 
$browserName 
[1] "phantomjs" 

$version 
[1] "2.1.1" 

$driverName 
[1] "ghostdriver" 

$driverVersion 
[1] "1.2.0" 

$platform 
[1] "linux-unknown-64bit" 

$javascriptEnabled 
[1] TRUE 

$takesScreenshot 
[1] TRUE 

$handlesAlerts 
[1] FALSE 

$databaseEnabled 
[1] FALSE 

$locationContextEnabled 
[1] FALSE 

$applicationCacheEnabled 
[1] FALSE 

$browserConnectionEnabled 
[1] FALSE 

$cssSelectorsEnabled 
[1] TRUE 

$webStorageEnabled 
[1] FALSE 

$rotatable 
[1] FALSE 

$acceptSslCerts 
[1] FALSE 

$nativeEvents 
[1] TRUE 

$proxy 
proxy$proxyType 
[1] "direct" 


$id 
[1] "8166b460-6fcd-11e7-bac0-1f0af3c89c32" 
+0

這似乎與phantomjs的當前版本的問題看https://github.com/ariya/ phantomjs/issues/14211。一種解決方案是恢復到1.9.8,但有問題顯示你的第二個窗口。在無頭模式下使用chrome可能是另一種選擇,請參閱https://github.com/ropensci/RSelenium/issues/138 – jdharrison

回答

2

這是一個已知的問題看https://github.com/ariya/phantomjs/issues/14211

作爲一種變通方法,您可以使用ghostdriver更UPTODATE版本,那麼打包帶phantomjs。轉到https://github.com/detro/ghostdriver/releases 我下載了ghostdriver 2.1.0版。您可以參考的路徑,這 更新ghostdriver作爲extraCapability:

library(RSelenium) 
my_extra <- list(phantomjs.ghostdriver.path = "/home/john/ghostdriver-2.1.0/src/main.js") 
cDrv3 <- RSelenium::rsDriver(port = 4569L, browser = "phantomjs", 
          extraCapabilities = my_extra) 
remDr <- cDrv3[["client"]] 
remDr$navigate("https://mol.medicover.pl") 
log_into <- remDr$findElement(using = "xpath", "//*[@id=\"oidc-submit\"]") 
log_into$clickElement() 
windows_list <- remDr$getWindowHandles() 
remDr$closeWindow() 
remDr$switchToWindow(windows_list[[2]]) 
card_number <- remDr$findElement(using = "xpath", "//*[@id=\"username-email\"]") 
card_number$sendKeysToElement(list("test", key = "enter")) 
card_number$screenshot(display = TRUE) 

enter image description here

#clean up 
remDr$close() 
cDrv3$server$stop()