尝试在 Python Selenium 中重命名下载的 pdf 文件时出错

Error while trying to rename downloaded pdf file in Python Selenium

我正在循环选项并根据 option.text 值,我正在尝试重命名我的 PDF 文件。但是,我遇到了一个错误。

代码如下:

mySelect = Select(driver.find_element_by_id("childContextDDL"))
index=-1
for option in mySelect.options:
  time.sleep(1)

  index = index + 1

  try:
    dropdown = driver.find_element_by_id('lnkChangeChild')
    dropdown.click()

    dropdown1 = driver.find_element_by_class_name('k-select')
    dropdown1.click()
    driver.execute_script("document.getElementById('childContextDDL').style.display = 'block';")
    mySelect1 = Select(driver.find_element_by_id("childContextDDL"))
    mySelect1.select_by_index(index)

    randomClick = driver.find_element_by_id('dcf-user-info')
    randomClick.click()

    exportLink = driver.find_element_by_link_text("Export")
    exportLink.click()

    driver.switch_to.window(driver.window_handles[1])
    driver.execute_script("document.getElementById('dcf-user-info').style.display = 'none';")
    time.sleep(1)
    print = driver.find_element_by_link_text("Print")
    print.click()

    time.sleep(1)

    driver.close()
    driver.switch_to.window(driver.window_handles[0])
  except:
    mySelect.select_by_index(index)

    randomClick = driver.find_element_by_id('dcf-user-info')
    randomClick.click()

    exportLink = driver.find_element_by_link_text("Export")
    exportLink.click()

    driver.switch_to.window(driver.window_handles[1])
    driver.execute_script("document.getElementById('dcf-user-info').style.display = 'none';")

    time.sleep(1)
    print = driver.find_element_by_link_text("Print")
    print.click()

    filename = max(["C:\Users\xyz\Downloads" + "\" + f for f in os.listdir("C:\Users\xyz\Downloads")],key=os.path.getctime)
    time.sleep(1)
    shutil.move(filename,os.path.join("C:\Users\xyz\Downloads",'"' + option.text + '.pdf"'))

    time.sleep(1)

    driver.close()
    driver.switch_to.window(driver.window_handles[0])

我在这一行遇到错误:

shutil.move(filename,os.path.join("C:\Users\xyz\Downloads",'"' + option.text + '.pdf"'))

如果我将该行更改为此,它不会引发错误:

shutil.move(filename,os.path.join("C:\Users\xyz\Downloads",r"ScoreCard.pdf"))

但我想根据所选选项动态更改 PDF 文件的名称。

供参考,以下是选项:

<select id="childContextDDL" data-filter="contains" data-role="dropdownlist" data-template="dcf-context-picker" data-value-field="Value" data-text-field="DisplayText" data-bind="events: { change: childContextListChange }, source: childContextList.ChildContextList" style="display: block;">
<option value="1">NATION</option>
<option value="12">ATLANTIC</option>
<option value="16">CHARLOTTE, NC

因此,对于国家,我希望将文件重命名为 Nation.pdf,而对于大西洋,则为 Atlantic.pdf,等等

让我知道哪里出错了。

这是错误:

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

这是我的做法。

我首先使用了一个小的 for 循环,我将 option.text 个值附加到一个新列表中:

index=-1
names = []    
for option in mySelect.options:
    names.append(option.text)
    print('names is: ',names)

然后在 try 和 except 中,我添加了这个:

filename = max(["C:\Users\parnal.patil\Downloads" + "\" + f for f in os.listdir("C:\Users\parnal.patil\Downloads")],key=os.path.getctime)
        shutil.move(filename,os.path.join("C:\Users\parnal.patil\Downloads",'2021Q1_' + str(names[index]) + '.pdf'))

其余代码保持原样。我还在一些地方增加了 time.sleep 持续时间,但这些都是微小的变化。