Python Selenium 自动填充问题
Python Selenium Autofill issue
我正在尝试制作一个自动脚本机器人来查找特定商品并将该商品添加到用户购物车等等。现在我被抓住了,因为每当代码自动填充用户信息时,phone 号码和信用卡号码要么倒过来要么混淆。
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("xxxxxxxxxx@gmail.com")
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()
您使用的是哪个浏览器?您可以像这样禁用自动填充:
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-single-click-autofill");
options.addArguments("--disable-autofill-keyboard-accessory-view[8]");
driver = new ChromeDriver(options);
或者尝试设置您自己的配置文件并尝试在开始测试之前删除 cookie!
以上摘自.
如果以上方法还不够,您或许可以允许自动填充工作一次,然后快速删除所有自动填充条目。所以在你输入之前调用清理:
browser.find_element_by_xpath('//*[@id="elementWhichWasAutoFilled"]/input').clear()
您可以尝试设置每个输入字段的值 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)
先删除填充文本,然后发送密钥。为此使用 ActionChain class。
试试下面的例子:
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()
我正在尝试制作一个自动脚本机器人来查找特定商品并将该商品添加到用户购物车等等。现在我被抓住了,因为每当代码自动填充用户信息时,phone 号码和信用卡号码要么倒过来要么混淆。
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("xxxxxxxxxx@gmail.com")
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()
您使用的是哪个浏览器?您可以像这样禁用自动填充:
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-single-click-autofill");
options.addArguments("--disable-autofill-keyboard-accessory-view[8]");
driver = new ChromeDriver(options);
或者尝试设置您自己的配置文件并尝试在开始测试之前删除 cookie!
以上摘自
如果以上方法还不够,您或许可以允许自动填充工作一次,然后快速删除所有自动填充条目。所以在你输入之前调用清理:
browser.find_element_by_xpath('//*[@id="elementWhichWasAutoFilled"]/input').clear()
您可以尝试设置每个输入字段的值 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)
先删除填充文本,然后发送密钥。为此使用 ActionChain class。 试试下面的例子:
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()