2017-09-20 4 views
1

Je tente de télécharger un fichier PDF dans une page en cliquant avec le bouton droit de la souris et en sélectionnant "enregistrer sous", mais il est évident que je ne fais rien, car le menu contextuel apparaît mais la flèche ne bouge pas.sendKeysToActiveElement ne fonctionne pas comme prévu, RSelenium

Tout conseil est le bienvenu.

EDIT: Désolé, je suis nouveau ici, c'est un exemple plus facilement reproductible que l'original ci-dessous. Dans cet exemple, j'essaie de cliquer avec le bouton droit de la souris, puis de sélectionner "Enregistrer sous" et appuyer sur Entrée. Le clic droit fonctionne mais rien d'autre.

library(RSelenium) 
driver <- rsDriver() 
remDr <- driver[["client"]] 
remDr$navigate("https://www.google.com/") 
webElem <- remDr$findElement("css", "html") 
webElem$click(2) 
webElem$sendKeysToElement(list(key = "down_arrow", key = "down_arrow", key = "enter")) 

Ancien exemple ci-dessous. Ouvre un navigateur, accède à une page de formulaire, sélectionne tous les résultats de 2016 et clique sur un bouton "Afficher le document" dans la première ligne pour ouvrir la page au format PDF. :

driver <- rsDriver() 
remDr <- driver[["client"]] 
remDr$navigate("https://portal.sos.state.nm.us/FinancialDisclosure/search.aspx") 
webElem <- remDr$findElement(using = 'id', value = "ContentPlaceHolder1_ddlYear") 
webElem$sendKeysToElement(list("2016", key = "enter")) 
webElem <- remDr$findElement(using = 'id', value = "ContentPlaceHolder1_btnSearch") 
webElem$clickElement() 
webElem <- remDr$findElement(using = 'id', value = "ContentPlaceHolder1_gvSummary_btnShow_0") 
webElem$getWindowHandles() 
webElem$getCurrentWindowHandle() #Here I identify the window handle of the popup and paste it in "x" below: 
webElem$switchToWindow("x") 

Tout cela fonctionne et je travaille dans l'onglet de la fenêtre correcte, mais après le clic droit sur la suite qui ne s'ouvre le menu contextuel, la dernière ligne ne fait pas ce que je m'y attendais à, qui est en surbrillance "enregistrer sous" et appuyez sur "Entrée". Au lieu de cela, tout l'écran se décale comme si une flèche descendait, puis rien d'autre.

webElem$click(2) 
webElem$sendKeysToActiveElement(list(key = 'down_arrow', key = 'down_arrow', key = 'enter')) 

Répondre

0

Vous ne serez pas en mesure d'interagir avec la boîte de dialogue Enregistrer sous. Vous pouvez enregistrer un fichier comme suit (10 gagner le chemin du fichier, etc. OS à charge):

library(RSelenium) 
eCaps <- list(
    chromeOptions = 
    list(prefs = list(
     "profile.default_content_settings.popups" = 0L, 
     "download.prompt_for_download" = FALSE, 
     "download.default_directory" = "C:/temp/chromeDL", 
     "download.directory_upgrade" = TRUE, 
     "plugins.always_open_pdf_externally" = TRUE 
    ) 
    ) 
) 
driver <- rsDriver(extraCapabilities = eCaps) 
remDr <- driver[["client"]] 
remDr$navigate("https://portal.sos.state.nm.us/FinancialDisclosure/search.aspx") 
webElem <- remDr$findElement(using = 'id', value = "ContentPlaceHolder1_ddlYear") 
webElem$sendKeysToElement(list("2016", key = "enter")) 
webElem <- remDr$findElement(using = 'id', value = "ContentPlaceHolder1_btnSearch") 
webElem$clickElement() 
webElem <- remDr$findElement(using = 'id', value = "ContentPlaceHolder1_gvSummary_btnShow_0") 
webElem$clickElement() 

file.rename("C:/temp/chromeDL/FDSDocument.ashx", 
      "C:/temp/chromeDL/testpdf1.pdf") 

.... 
.... 
# clean up 
rm(driver) 
gc() 
+0

incroyable, cette réponse est venue que je composais que modifier long et confus. Fonctionne un charme, et j'aimerais en savoir plus sur ce qui se passe avec cette variable eCaps. – johnrroby

+0

L'argument des capacités supplémentaires (eCap) transmet au navigateur chrome une liste d'options. Il lui dit de télécharger automatiquement les fichiers dans le répertoire donné. À partir de chrome 57, la façon dont cela fonctionne a changé. Plus de détails ici https://stackoverflow.com/questions/31672897/how-to-download-a-pdf-file-in-chrome-using-selenium-webdriver – jdharrison