如何使用Selenium和Python改变输入字段的值

问题描述 投票:1回答:2

我想更改表格输入中的输入字段值,但无法更改。

输入值是这样的 网址

Email: [email protected]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" 

Required Field 当我试着用selenium或者JS来改变它的时候,当我们按 "发送订单 "来提交表单时,它似乎并没有改变。

我的代码痕迹是。

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")

但是当我提交的时候,似乎还是没有改变。

javascript selenium selenium-webdriver selenium-chromedriver webdriverwait
2个回答
2
投票

要执行以下步骤。

  1. 在左侧点击 "卖出订单 "红色按钮在仪表板部件
  2. 点击后会出现一个弹窗,选择 "订单类型 "为 "限价"
  3. 出现一个新的表格栏,名为 "限价"
  4. 发送值 10000<input> 场。

你必须诱导 WebDriverWait 对于 element_to_be_clickable() 您可以使用以下方法 定位策略:

  • 代码块。

    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("[email protected]")
    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()
    
  • : 在构建答案的时候。

你设定的入市价格必须高于或等于9786. 7元

  • 浏览器快照。

primaxbt


2
投票

在检查require元素的时候,我发现有一个iframe,内容就包裹在这个iframe上。

enter image description here

所以要在selenium中处理框架,首先你需要切换到正确的iframe,然后它允许你与元素交互。

  1. 使用iframe索引进行切换

    driver.switch_to.frame(0)
    
  2. 使用iframe元素切换

    main_frame = driver.find_element_by_css_selector('iframe.ng-star-inserted')
    driver.switch_to.frame(main_frame)
    
  3. 使用iframe名称进行切换

    driver.switch_to.frame('frame name') #make sure name attribute available in frame tag
    

这是你如何使用Explicit等待条件切换到它的方法

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')
© www.soinside.com 2019 - 2024. All rights reserved.