首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复错误中不可交互元素Python Selenium Chromdriver

如何修复错误中不可交互元素Python Selenium Chromdriver
EN

Stack Overflow用户
提问于 2019-10-01 01:31:10
回答 1查看 521关注 0票数 0

Image of HTML code

我正在尝试使用Python和selenium ChromeDriver将值传递给输入元素。我可以在第一个字段中设置cc #,但是对于name,我得到的是保持error元素不可交互。

我尝试了多种方法来找到解决方案: Iframe -Using ActionChains -Using WebDriveWait的-Switching驱动程序,要显示的元素,要单击的元素-Using Javascript执行脚本

‘python

代码语言:javascript
复制
    def addCC(mCCNumber,driver,mCardName,mExpiry,mSecCode):      
    # move the driver to the first iFrame 
    #driver.find_elements_by_tag_name("iframe")[0]
    iframe = driver.find_element_by_xpath("//iframe[@class='card-fields-iframe']")
    mainWin = driver.current_window_handle  
    # move the driver to the first iFrame 
    #driver.switch_to_frame(driver.find_elements_by_tag_name("iframe")[0]) 
    driver.switch_to_frame(iframe)
    ccnumber = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,"//input[@placeholder='Card number']")))
    ccnumber.send_keys(mCCNumber)
    #driver.switch_to_window(mainWin)  
    time.sleep(1)

    #cardname = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,"//input[@autocomplete='cc-name']")))
    #WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH ,"//input[@autocomplete='cc-name']")))
    #webdriver.ActionChains(driver).move_to_element(cardname).send_keys(mCardName).perform()
    #webdriver.ActionChains(driver).move_to_element(cardname).click(cardname).send_keys(mCardName).perform()
    #element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@autocomplete='cc-name']")))
    #driver.execute_script("arguments[0].value= 'dummy dumm';", element)
    element = driver.find_element_by_xpath("//input[@autocomplete='cc-name']")
    webdriver.ActionChains(driver).move_to_element(element).click(element).send_keys(mCardName).perform()
    element.send_keys(mCardName)
    driver.switch_to_window(mainWin)  
    time.sleep(1)
    driver.switch_to_frame(driver.find_elements_by_tag_name("iframe")[0])  
    expdate = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH ,"//input[@id='expiry']"))
            )
    WebDriverWait(driver, 20).until(
            EC.element_to_be_clickable((By.XPATH ,"//input[@id='expiry']"))
            )
    expdate.send_keys(mExpiry)
    driver.switch_to_window(mainWin)  
    time.sleep(1)
    driver.switch_to_frame(driver.find_elements_by_tag_name("iframe")[0])  
    seccode = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH ,"//input[@placeholder='Security code']"))
            )
    seccode.send_keys(mSecCode)
    driver.switch_to_window(mainWin)  
    time.sleep(3)
    #eles = driver.find_elements_by_xpath('//*[@id]')
    #for ele in eles:
    #    print(ele.tag_name)

“”“

EN

回答 1

Stack Overflow用户

发布于 2019-10-01 01:40:35

您可以尝试使用Javascript设置元素值:

代码语言:javascript
复制
 def addCC(mCCNumber,driver,mCardName,mExpiry,mSecCode):   

    # move the driver to the first iFrame 
    iframe = driver.find_element_by_xpath("//iframe[@class='card-fields-iframe']")

    # save main window context
    mainWin = driver.current_window_handle  

    # move the driver to the first iFrame 
    driver.switch_to_frame(iframe)

    # enter CC number
    ccnumber = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,"//input[@placeholder='Card number']")))
    ccnumber.send_keys(mCCNumber)

    time.sleep(1)

    # get CC name element   
    ccNameElement = driver.find_element_by_xpath("//input[@id='name']")

    # click CC name element with JS to activate it
    driver.execute_script("arguments[0].click();", ccNameElement);
    ccNameElement.click()

    # set cc name using send_keys
    ccNameElement.send_keys(mCardName)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58172621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档