Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复Python驱动程序错误中不可交互的元素_Python_Selenium_Iframe_Selenium Chromedriver - Fatal编程技术网

如何修复Python驱动程序错误中不可交互的元素

如何修复Python驱动程序错误中不可交互的元素,python,selenium,iframe,selenium-chromedriver,Python,Selenium,Iframe,Selenium Chromedriver,我正在尝试使用Python和selenium ChromeDriver将值传递给输入元素。 我可以在第一个字段中设置cc#,但是对于name,我得到了保持错误元素不可交互的结果 我尝试了多种方法来找到解决方案: -将驱动程序切换到Iframe -使用动作链 -使用WebDriveWait,元素可见,元素可单击 -使用Javascript执行脚本 ''蟒蛇 ''您可以尝试使用Javascript设置元素值: def addCC(mCCNumber,driver,mCardName,mExpiry

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

我尝试了多种方法来找到解决方案: -将驱动程序切换到Iframe -使用动作链 -使用WebDriveWait,元素可见,元素可单击 -使用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)



您可以发布一些您正在尝试测试的页面的HTML,包括iframe元素和要向其发送密钥的CC字段吗?这将有助于追踪这个问题。iframe代码看起来正确,元素不可交互与元素本身有关。如果是iframe问题,您只会看到webdriver超时。@Christine感谢您的回复,我已经添加了一个指向页面HTML图像的链接。对于上下文,我可以找到并传递CC#OK,但卡上的名字不会出现错误。我尝试使用javascript设置值,但什么都没有发生。代码运行,但在input.driver.execute_脚本(“参数[0].setAttribute('value','mCardName')”,元素)中没有输入任何内容@robertRoberts我在setAttribute()之后错过了一个分号。您能否尝试使用
driver.executeScript(“参数[0].setAttribute('value',mCardName);”,ccNameElement)?另外,是否可以运行print(ccnamelement)以确保元素的位置正确?使用此脚本驱动程序。执行_脚本(“参数[0]。setAttribute('value',mCardName);”,namelement)获取javascript错误未定义mCardName。驱动程序。执行_脚本(“参数[0]。setAttribute('value',“+mCardName+”);”,namelement)像这样传递变量,我没有得到错误,但是值没有设置为输入。
 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)