gpt4 book ai didi

python - 使用Python Selenium Chromedriver下载不一致 'Failed - Path too long'错误

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:52 27 4
gpt4 key购买 nike

堆栈:Windows 8.1、Python 3.4.3.4、Selenium 2.46、Chromedriver 2.16

我使用 Selenium Python 与 Chromedriver 绑定(bind)来自动从以下 URL 进行一些下载:r'http://financials.morningstar.com/'

我设置了以下 chromedriver 首选项:

chromeOptions = webdriver.ChromeOptions()
prefs = {'download.default_directory':symbol_dir}
chromeOptions.add_experimental_option('prefs', prefs)
chromeOptions.add_extension(self.chromeUBlock_path)
chromedriver_path = self.chromedriver_path

此外,我还设置了以下 Selenium 代码来运行下载,该下载可以正常工作并下载到正确的文件位置等:

symbol = 'AAPL' # test symbol
IS_anl_statement = 'income-statement'
IS_anl_abbrev = 'is'
url_anl = self.mstar_base_url + r'{}/{}.html?t={}&region=usa&culture=en-US'
IS_anl = webdriver.Chrome(executable_path=chromedriver_path, chrome_options=chromeOptions)
IS_anl.set_page_load_timeout(90)

try:
IS_anl.get(url_anl.format(IS_anl_statement, IS_anl_abbrev, symbol))
anl_element = WebDriverWait(IS_anl, 90).until(EC.element_to_be_clickable(
(By.LINK_TEXT, 'Annual')))
anl_csv_element = WebDriverWait(IS_anl, 90).until(EC.element_to_be_clickable(
(By.CSS_SELECTOR,self.css_path_export)))
anl_csv_element.click()
for i in range(1,10,1):
time.sleep(i/50)
if os.path.isfile(anl_file_string)==True:
break
except Exception as e:
print(e)

IS_anl.quit()

但是,当使用以下缩写运行下载时(只需将 balance-sheet 替换为 profit-statement,如下所示:

    BS_anl_statement = 'balance-sheet'
BS_anl_abbrev = 'bs'

和其余的 Selenium 代码完全相同,我得到了可怕的下载错误:失败路径太长

这很奇怪,因为实际的文件路径不太长。事实上,我在 3 个不同的目录中测试了下载,每个目录的文件路径都比上一个更短。最终示例路径为:r"C:\mstar_data\\"

我被困住了。我在两次下载尝试之间看到的唯一区别是实际的 CSV 链接。但即使在这种情况下,损益表下载网址实际上也比 Assets 负债表长,所以我再次陷入困境。它们在这里:

I/S CSV 网址:http://financials.morningstar.com/ajax/ReportProcess4CSV.html?&t=XNAS:ZUMZ&region=usa&culture=en-US&cur=&reportType=is&period=12&dataType=A&order=asc&columnYear=5&curYearPart=1st5year&rounding=3&view=raw&r=573205&deminatorView =原始&数字=3

B/S CSV 网址:http://financials.morningstar.com/ajax/ReportProcess4CSV.html?&t=XNYS:A&region=usa&culture=en-US&cur=&reportType=bs&period=12&dataType=A&order=asc&columnYear=5&curYearPart=1st5year&rounding=3&view=raw&r=558981&deminatorView =原始&数字=3

对这种不一致的任何帮助都将是一个很大的帮助,并且绝对值得赞赏。谢谢。

最佳答案

我找到了解决此问题的方法。 @Skandigraun 是对的,有一段代码试图过早地使用下载的文件。

我使用高级卸载程序清除了所有临时文件、互联网历史记录等。我重新启动了电脑。我更改了以下有关 Skandigraun 评论的代码块:

for in range(1, 10, 1):
time.sleep(i/50)
if os.path.isfile(anl_file_string)==True:
break

至:

for i in range(1, 10, 1):
time.sleep(i/20) # changed from 50 to 20
if os.path.isfile(anl_file_string)==True:
break

我补充道:

finally:
IS_anl.quit()

现在代码运行更加稳定。我相信测试文件是否存在的操作系统调用发生得太快/太频繁,导致下载失败。我将 finally 语句添加到 try/except 循环中,以关闭浏览器,无论发生什么情况。如果访问站点出现问题、超时错误等,这可以防止脚本挂起。

关于python - 使用Python Selenium Chromedriver下载不一致 'Failed - Path too long'错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31630613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com