2017-04-24 155 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