如何使用 Selenium 和 Python 更改输入字段值
How to change the input field value using Selenium and Python
我正在尝试更改表单输入中的输入字段值,但无法这样做。
输入值在此URL
Email: Vela.admi@gmail.com
PW: Testing@123
页面上的表单在这些操作后出现:
1. on left side click on "Sell Order" red button in Dashboard widget
2. a popup will appear on click, select "Order Type" as "Limit"
3. a new formfield appears, named "Limit Price"
当我尝试使用 selenium 或即使 JS 更改它时,当我们通过按 "Send Order"
提交表单时,它似乎没有改变
我的代码轨迹是:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time
driver.get(url)
driver.find_element_by_css_selector('#gwt-uid-770 > span > span > input').send_keys('6700')
我也试过了
driver.execute_script("document.querySelector('#gwt-uid-770 > span > span > input').value=6700")
但是当我提交时它似乎并没有改变。
在检查 require 元素时,我发现有一个包含内容的 iframe。
所以要处理 selenium 中的框架,您首先需要切换到正确的 iframe,然后它允许您与元素进行交互。
使用 iframe 索引切换
driver.switch_to.frame(0)
使用 iframe 元素切换
main_frame = driver.find_element_by_css_selector('iframe.ng-star-inserted')
driver.switch_to.frame(main_frame)
使用 iframe 名称切换
driver.switch_to.frame('frame name') #make sure name attribute available in frame tag
这就是你如何使用显式等待条件切换到它
WebDriverWait(driver, 45).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe.ng-star-inserted")))
并使用此定位器在 texxtbox 中输入文本
driver.find_element_by_xpath("//span[contains(.,'Limit Price')]/following-sibling::span//input").send_keys('6700')
要执行以下步骤:
- 在左侧单击仪表板小部件中的 "Sell Order" 红色按钮
- 单击时会出现一个弹出窗口,select "Order Type" as "Limit"
- 出现一个新的表单域,名为 "Limit Price"
- 将值
10000
发送到 <input>
字段。
你要诱导 for the element_to_be_clickable()
and you can use the following :
代码块:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get('https://primexbt.com/id/sign-in?redirect=%2Fmy%2Ftrade')
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[formcontrolname='email']"))).send_keys("Vela.admi@gmail.com")
driver.find_element_by_css_selector("input[formcontrolname='password']").send_keys("Testing@123")
driver.find_element_by_css_selector("span.mat-button-wrapper").click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.popup-close"))).click()
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.ng-star-inserted")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.price.price-bid"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='selectBox--label' and text()='Market']"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='dropDown--list']//li[contains(., 'Limit')]"))).click()
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//label[text()='Limit Price']//following::span[1]//span[@class='numericStepper--input']//input[@class='gwt-TextBox']")))
ActionChains(driver).click(element).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).send_keys("10000").perform()
注意:构造答案时:
Entry Price you set must be higher or equal to 9786.7
- 浏览器快照:
我正在尝试更改表单输入中的输入字段值,但无法这样做。
输入值在此URL
Email: Vela.admi@gmail.com
PW: Testing@123
页面上的表单在这些操作后出现:
1. on left side click on "Sell Order" red button in Dashboard widget
2. a popup will appear on click, select "Order Type" as "Limit"
3. a new formfield appears, named "Limit Price"
我的代码轨迹是:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time
driver.get(url)
driver.find_element_by_css_selector('#gwt-uid-770 > span > span > input').send_keys('6700')
我也试过了
driver.execute_script("document.querySelector('#gwt-uid-770 > span > span > input').value=6700")
但是当我提交时它似乎并没有改变。
在检查 require 元素时,我发现有一个包含内容的 iframe。
所以要处理 selenium 中的框架,您首先需要切换到正确的 iframe,然后它允许您与元素进行交互。
使用 iframe 索引切换
driver.switch_to.frame(0)
使用 iframe 元素切换
main_frame = driver.find_element_by_css_selector('iframe.ng-star-inserted') driver.switch_to.frame(main_frame)
使用 iframe 名称切换
driver.switch_to.frame('frame name') #make sure name attribute available in frame tag
这就是你如何使用显式等待条件切换到它
WebDriverWait(driver, 45).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe.ng-star-inserted")))
并使用此定位器在 texxtbox 中输入文本
driver.find_element_by_xpath("//span[contains(.,'Limit Price')]/following-sibling::span//input").send_keys('6700')
要执行以下步骤:
- 在左侧单击仪表板小部件中的 "Sell Order" 红色按钮
- 单击时会出现一个弹出窗口,select "Order Type" as "Limit"
- 出现一个新的表单域,名为 "Limit Price"
- 将值
10000
发送到<input>
字段。
你要诱导element_to_be_clickable()
and you can use the following
代码块:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe') driver.get('https://primexbt.com/id/sign-in?redirect=%2Fmy%2Ftrade') WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[formcontrolname='email']"))).send_keys("Vela.admi@gmail.com") driver.find_element_by_css_selector("input[formcontrolname='password']").send_keys("Testing@123") driver.find_element_by_css_selector("span.mat-button-wrapper").click() WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.popup-close"))).click() WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.ng-star-inserted"))) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.price.price-bid"))).click() WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='selectBox--label' and text()='Market']"))).click() WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='dropDown--list']//li[contains(., 'Limit')]"))).click() element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//label[text()='Limit Price']//following::span[1]//span[@class='numericStepper--input']//input[@class='gwt-TextBox']"))) ActionChains(driver).click(element).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).send_keys("10000").perform()
注意:构造答案时:
Entry Price you set must be higher or equal to 9786.7
- 浏览器快照: