繁体   English   中英

尝试在 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,我想将文件重命名为 Nation.pdf,而对于 Atlantic,它将是 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 and 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'))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM