在函数和循环中调用调用时,Python selenium send_keys 不起作用

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

我是 python selenium 的新手。我正在尝试将 csv 文件上传到门户网站。我创建了以下函数/代码来将文件上传到门户。


def logging_in():
    #my login code bla bla bla


def upload_file(urlname,csvfile):
    driver.get(urlname)
    #Below line not able to format correctly.
WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.TAG_NAME,'iframe')))
   if check_exists_by_tag(driver,'iframe'):
      iframe = driver.find_element(By.TAG_NAME,'iframe')
      driver.switch_to.frame(iframe)
      
      WebDriverWait(driver,30).until(EC.presence_of_all_elements_located((By.NAME, "csvFile")))
      if check_exists_by_Name(driver,'csvFile'):
          file_input = driver.find_element(By.NAME, "csvFile")
          file_input.send_keys(csvfile)
          upload_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"/html/body/div1/div4/div5/span/a")))
          upload_button.click()
      driver.switch_to.default_content()

if __name__ == '__main__':
    logging_in()
    time.sleep(2)
    
    csv_files_list = [file for file in os.listdir(inputpath) if file.endswith('.csv')]
    
    for csv_file in csv_files_list:
        uploadfile(url,inputpath+csv_file)

文件上传第一次工作正常。在第二个循环期间,文件上传在代码

send_keys
处不起作用。我不确定我在这里缺少什么?

错误消息显示,

upload_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"/html/body/div1/div4/div5/span/a")))

这是因为

file_input.send_keys(csvfile)
没有将文件输入到我在浏览器中看到的路径。

在第一次执行循环期间,我可以在文本框中看到文件名。 enter image description here

在第二次循环执行期间,我在文本框中看不到文件名。

python selenium-webdriver
1个回答
0
投票

您遇到的问题似乎是由于网页的动态行为造成的,其中文件输入元素可能会在首次上传后重置或隐藏。您可以尝试在第一次上传后使用 driver.refresh() 来重置页面并使文件输入可用于下次上传。

另外,在上传下一个文件之前,请尝试执行“file_input.clear()”以删除先前的文件路径并允许新的文件路径。

© www.soinside.com 2019 - 2024. All rights reserved.