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