2017-04-24 3 views
0

Ich versuche, einen Auto-Skript-Bot zu machen, der ein bestimmtes Element findet und das Element dem Benutzer-Einkaufswagen usw. hinzufügt. Jetzt werde ich erwischt, denn wenn sich der Code in den Benutzerinformationen automatisch einfügt, werden die Telefonnummer und die Kreditkartennummer entweder rückwärts oder gemischt angezeigt.Python Selen AutoFill-Ausgabe

enter image description here

from selenium import webdriver 
from selenium.webdriver.support.select import Select 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys 

# Open chrome web browser and directs to supreme.com 

browser = webdriver.Chrome() 
browser.get('http://www.supremenewyork.com/shop/all') 

# Find specific item 

browser.find_element_by_xpath('//* 
[@id="container"]/article[12]/div/a/img').click() 
WebDriverWait(browser,10).until(
EC.visibility_of_any_elements_located((By.ID,'size'))) 


# Select size 

Select = Select(browser.find_element_by_id('size')) 
Select.select_by_visible_text("Large") 

# Add to cart 

browser.find_element_by_xpath('//*[@id="add-remove-buttons"]/input').click() 
browser.find_element_by_xpath('//*[@id="cart"]/a[2]').click() 


# Input user info 

Name = browser.find_element_by_id('order_billing_name') 
Name.send_keys("Justin Malik") 

Email = browser.find_element_by_id('order_email') 
Email.send_keys("[email protected]") 

Telephone = browser.find_element_by_id('order_tel') 
Telephone.send_keys("3334449875") 

Billing_address = browser.find_element_by_id('bo') 
Billing_address.send_keys("13002 lala land CT") 

Billing_zip = browser.find_element_by_id('order_billing_zip') 
Billing_zip.send_keys("33579") 

Billing_City = browser.find_element_by_id('order_billing_city') 
Billing_City.send_keys() 

Billing_State = browser.find_element_by_id('order_billing_state') 
Billing_State.send_keys("TX") 



# Credit info 

Credit_number = browser.find_element_by_id('cnb') 
Credit_number.send_keys("1234 5698 7588 4444") 

Credit_month = browser.find_element_by_id('credit_card_month') 
Credit_month.send_keys("07") 

Credit_year = browser.find_element_by_id('credit_card_year') 
Credit_year.send_keys("2021") 

Credit_verif = browser.find_element_by_id('vval') 
Credit_verif.send_keys("334") 


# Accept Terms & Agreements 

terms = browser.find_element_by_id('order_terms').click() 
+0

Haben die Telefon- und CC# -Felder eine automatische Formatierung? Ich vermute, dass sie es tun, und ich habe in der Vergangenheit mit Problemen zu tun gehabt, bei denen Selen "zu schnell" tippte. Versuchen Sie, eine Methode zu erstellen, die Zeichen für Zeichen eingibt und zwischen jedem warten muss. Keine langfristige Lösung, kann Ihnen aber beim Debuggen helfen. – OCary

+0

Dies hat nicht funktioniert – Ksuby

Antwort

1

Zuerst löschen Sie die fill-up Text und dann Schlüssel senden Sie. Verwenden Sie die ActionChain-Klasse dafür. versuchen Sie unter Beispiel:

from selenium.webdriver.common.action_chains import ActionChains 

Telephone_field = browser.find_element_by_id('order_tel') 

Creditcard_field = browser.find_element_by_id('cnb') 

ActionChains(driver).move_to_element(Telephone_field).click().key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys("3334449875").perform() 

ActionChains(driver).move_to_element(Creditcard_field).click().key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys("1234 5698 7588 4444").perform() 
+0

Hallo. Ein Liner oder Code nur Antworten sind nicht der beste Weg, um eine Frage zu beantworten. Bitte fügen Sie eine Erklärung hinzu, warum Sie dies für eine gute Lösung halten. – demouser123

+0

Ich habe einen Kommentar hinzugefügt. – Shailendra

+0

DIESE GEARBEITET! .. Können Sie mir erklären, warum, was ich vorher hatte, gab mir die Zahlen in zufälliger Reihenfolge und wofür sind .keydown und .keyup? – Ksuby

0

Welche Browser verwenden Sie? Sie könnten in der Lage sein zu deaktivieren auto-fill wie folgt aus:

ChromeOptions options = new ChromeOptions(); 
    options.addArguments("--disable-single-click-autofill"); 
    options.addArguments("--disable-autofill-keyboard-accessory-view[8]"); 
    driver = new ChromeDriver(options); 

Oder vielleicht versuchen Sie Ihr eigenes Profil einstellen und versuchen, die Cookies zu löschen, bevor Sie den Test starten! Das obige wurde von here genommen.

Wenn das oben Genannte nicht ausreicht, können Sie Autofill vielleicht erlauben, einmal zu arbeiten und dann schnell alle Auto-Fill-Einträge zu löschen. So rufen Sie eine Bereinigung, bevor Sie Folgendes eingeben:

browser.find_element_by_xpath('//*[@id="elementWhichWasAutoFilled"]/input').clear() 
+0

Ich bin derzeit in der Klasse, aber dies könnte funktionieren, weil ich es merkt, Auto füllt meine Stadt und frage mich, wie es funktioniert, obwohl ich dieses Leerzeichen im Code – Ksuby

+0

Ich benutze Chrom @Xwris Stoixeia – Ksuby

+0

Ok die Antwort aktualisiert, hast du versucht, [element.clear()] zu löschen, bevor du zufällig tippst? –

0

Sie können versuchen, Wert jedes Eingabefeld zu setzen mit JavaScript:

Telephone = browser.find_element_by_id('order_tel') 
Credit_number = browser.find_element_by_id('cnb') 
browser.execute_script('arguments[0].value="3334449875";', Telephon) 
browser.execute_script('arguments[0].value="1234569875884444";', Credit_number) 
+0

Ich bemerke, dass die cc und Telefonnummer Textfelder (___) ___-____ bereits in das Textfeld haben. Sie können eine Nummer irgendwo in diesen Zeilen platzieren, wie würde Python jetzt von links nach rechts in dieser Situation beginnen, weil es die Adresse sowie die Postleitzahl gut tut – Ksuby