2017-04-05 2 views
0

Ich versuche, ein Skript zu schreiben, um sich auf ebay mit dem Selenmodul in Python automatisch einzuloggen.Skript zur automatischen Anmeldung bei ebay mit Selenpython

Ich bin in der Lage, die Anmeldeseite in Firefox zu starten. Hier ist der Code:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 

firefox_capabilities = DesiredCapabilities.FIREFOX 
firefox_capabilities['marionette'] = True 
firefox_capabilities['binary'] = '/usr/bin/firefox' 

driver = webdriver.Firefox(capabilities=firefox_capabilities) 
driver.get("https://signin.ebay.in/ws/eBayISAPI.dll?SignIn&ru=http%3A%2F%2Fwww.ebay.in%2F") 

search_field = driver.find_element("Email or username") 
search_field.clear() 
search_field.send_keys("My username") 

Aber das scheint nicht zu funktionieren. Ich kann nicht

find_element_by_id 

verwenden, da die ID dynamisch ändernden hält.

<input size="40" maxlength="64" name="147630419" id="147630419" autocapitalize="off" autocorrect="off" placeholder="Email or username" class="fld" type="text"> 

So sieht der Platzhalter für E-Mails aus. Der Platzhalter für das Passwort ist ebenfalls ähnlich. Der Name und die ID ändern sich dynamisch.

Wie kann ich das durchstehen?

+0

try XPath ' ""(// input [@ placeholder = 'Email oder Benutzername']) [2] "' –

Antwort

1

Ich bin nicht ganz sicher über die Verwendung von driver.find_element(), aber ich denke in driver.find_element() müssen Sie in den Locator (zB: xPath) des Feldes Benutzername übergeben, nicht den Platzhalter des Eingabefeldes im String-Format.

Die xPath von Feld Benutzername ist "(//input[@placeholder='Email or username'])[2]", so versuchen:

driver.find_element_by_xpath("(//input[@placeholder='Email or username'])[2]")

UPDATE

Das xPath von Passwort-Feld "(//input[@placeholder='Password'])[1]"

+0

Hallo @Jayesh, Danke. Es hat für mich funktioniert. Das Skript ist jetzt in der Lage, den Benutzernamen in das Feld einzugeben. Ich wollte nur wissen, was die [ 2] bedeutet, ich habe auch versucht, das gleiche für das Passwort zu tun, da beide Elemente gleich aussehen, aber es funktioniert nicht –

+0

@VivekBhageria der xPath '// Eingabe [@placehol der = 'E-Mail oder Benutzername'] 'gibt 2 Elemente in einem Array zurück. Da das zweite Element des Arrays das ist, was wir wollen, habe ich [2] gewählt, was im Grunde bedeutet, das Element bei Index 2 auszuwählen (Indizes beginnen bei 1). –

+0

@VivekBhageria Ich habe meine Antwort aktualisiert, um xPath des Passwortfeldes einzuschließen. –

1

ist seit id dynamisch für XPath gehen verändert . Probieren Sie diesen Stückcode. Es funktioniert

driverInstance.find_element_by_xpath(".//*[@id='pri_signin']/div[4]/span[2]/input").send_keys("Hello") 
1

Sie verwenden find_element() Methode falsch, wie Sie 2 Argumente übergeben sollte: by und value.

Sie könnten Codezeile versuchen:

driver.find_element("css", "input:not(#userid)[placeholder='Email or username']").send_keys("My username") 

aber besser geeignete find_element_by_...() Methode, wie die von @Jayesh Doolani vorgeschlagen ein verwenden (+1)

+0

sollte es nicht 'By.CSS_SELECTOR' anstelle von '" css "' –

+0

sein Es könnte 'By.CSS_SELECTOR' sein, wenn' selen.webdriver.common.by.By' zuvor importiert wurde. '" css "' ist auch akzeptabel – Andersson

+0

Hallo Anderson. Ich habe versucht, diese Codezeile, aber es wirft den Fehler "selen.common.exceptions.WebDriverException: Nachricht: Unbekannte Locator-Strategie CSS". Der von Jayesh vorgeschlagene hat funktioniert. Ich muss jetzt für das Passwort-Feld arbeiten. –

Verwandte Themen