尝试在 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 持续时间,但这些都是微小的变化。
我正在循环选项并根据 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 持续时间,但这些都是微小的变化。