J'essaie de gratter Ce site Web à l'aide dersenium. Envoi de texte à d'autres éléments fonctionne, mais le champ de connexion me donne des noix. Je pense que c'est peut-être parce que c'est en Java (au moins les sélecteurs de CSS dans SelectorGadget disent .j_username & .j_password) mais je ne peux pas sembler comprendre comment traiter avec cela.
Cela ne me dérangerait pas de vous connecter manuellement mais je ne peux pas non plus comprendre comment cela fonctionne =). P>
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)
3 Réponses :
La page contient plusieurs connexions de connexion, au moins une pour mobile et une pour le bureau. Selon la taille de l'écran simulé / l'agent utilisateur, un seul identifiant est visible l'autre est invisible. Pour obtenir le login pour le bureau, utilisez les expressions XPath suivantes:
//*/div[@class='login_screen']//*[contains(@class,'j_username') //*/div[@class='login_screen']//*[contains(@class,'j_password')
Il semble XPath code> Problème suivant XPath pour Nom d'utilisateur code> et Mot de passe code>. //div[@class='login_screen']//input[@name='j_username']
//div[@class='login_screen']//input[@name='j_password']
semble que vous étiez assez proche. Éventuellement les stratégies de localisateur em> que vous utilisiez identifie plusieurs éléments et d'appeler ClearElement () code>, clickelement () code> et sendkyStoElement () essayait d'interagir avec le premier élément correspondant dans //div[@class='login_screen']//input[@class='inputfield j_password' and @name='j_password']
Homme, j'adore Stackoverflow. Thx, vous êtes le plus grand =)!