2017-04-24 151 views
0

我正在嘗試製作一個自動腳本機器人,它可以查找特定項目並將該項目添加到用戶購物車等等。現在我被抓到了,因爲每當代碼在用戶信息中自動填充電話號碼和信用卡號碼時,它們會反向出現或混淆。Python硒自動填充問題

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

手機和CC#字段是否對其自動格式化?我猜他們是這樣做的,過去硒在「太快」輸入時遇到了問題。 嘗試製作一種逐個字符地輸入字符並在每個字符之間等待的方法。不是一個長期的解決方案,但可以幫助您調試。 – OCary

+0

這不起作用 – Ksuby

回答

1

首先刪除注滿文本,然後做派鍵。爲此使用ActionChain類。 請嘗試以下示例:

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

你好。一個班輪或代碼只有答案不是回答問題的最佳方式。請添加一些解釋,說明爲什麼你認爲這將是一個很好的解決方案。 – demouser123

+0

我加了評論。 – Shailendra

+0

工作!你能告訴我爲什麼我之前給了我隨機順序的數字,什麼是.keydown和.keyup是爲了什麼? – Ksuby

0

您使用哪種瀏覽器?你也許可以禁用自動填充像這樣:

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

或者,也許嘗試設置自己的個人資料,並嘗試在開始測試之前,刪除cookies! 以上摘自here

如果以上不足,您可以允許自動填充工作一次,然後快速刪除所有自動填充條目。於是呼清理你前輸入:

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

我目前在課堂上,但這可能工作,因爲我注意到它自動填充我的城市,並不斷想知道它是如何做到的,即使我在代碼中留下了空白 – Ksuby

+0

我正在使用chrome @Xwris Stoixeia – Ksuby

+0

好吧更新了答案,試圖在打字前嘗試刪除[element.clear()]? –

0

你可以嘗試設置每個輸入字段的值與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

我注意到cc和電話號碼文本字段已經在文本框中有(___)___-____。你可以在這些行的任何位置放置一個數字,python現在如何在這種情況下從左到右開始,因爲它的街道地址和郵政編碼都很好 – Ksuby