python - Selenium :无法下载文件

标签 python python-2.7 selenium selenium-webdriver youtube

我正在尝试使用this网站自动从YouTube下载mp3文件。

目标:

  • 访问下载网站
  • 粘贴YouTube链接
  • 点击“转换视频”
  • 等待下载链接出现,然后单击它

  • 当我使用browser.find_by_id('dl_link').click()时,我的代码执行时没有任何错误,但未下载文件。为什么?

    当我使用browser.click_link_by_partial_text('Download')时,出现以下错误。

    这是我的代码:
    from splinter.browser import Browser
    import time
    
    with Browser() as browser:
       browser.visit("http://www.youtube-mp3.org")
       browser.find_by_id('youtube-url').fill("https://www.youtube.com/watch?v=lgT1AidzRWM")
       browser.find_by_id('submit').click()
    
       if browser.is_element_present_by_id('dl_link'):
          time.sleep(2)
          browser.click_link_by_partial_text('Download')
          # browser.find_by_id('dl_link').click()
          print "Clicked Download"
          time.sleep(2)
    

    这是我得到的错误:
    Traceback (most recent call last):
      File "/Users/anon/Dropbox/Programs/Proj/splinter2.py", line 11, in <module>
        browser.click_link_by_partial_text('Download')
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/splinter/driver/__init__.py", line 332, in click_link_by_partial_text
        return self.find_link_by_partial_text(partial_text).first.click()
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/splinter/driver/webdriver/__init__.py", line 539, in click
        self._element.click()
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 74, in click
        self._execute(Command.CLICK_ELEMENT)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 457, in _execute
        return self._parent.execute(command, params)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 233, in execute
        self.error_handler.check_response(response)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with
    Stacktrace:
        at fxdriver.preconditions.visible (file:///var/folders/wj/t56fgsms4rdcgptcy94k2w8m0000gn/T/tmpAVUrd2/extensions/fxdriver@googlecode.com/components/command-processor.js:10092)
        at DelayedCommand.prototype.checkPreconditions_ (file:///var/folders/wj/t56fgsms4rdcgptcy94k2w8m0000gn/T/tmpAVUrd2/extensions/fxdriver@googlecode.com/components/command-processor.js:12644)
        at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/wj/t56fgsms4rdcgptcy94k2w8m0000gn/T/tmpAVUrd2/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
        at DelayedCommand.prototype.executeInternal_ (file:///var/folders/wj/t56fgsms4rdcgptcy94k2w8m0000gn/T/tmpAVUrd2/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
        at DelayedCommand.prototype.execute/< (file:///var/folders/wj/t56fgsms4rdcgptcy94k2w8m0000gn/T/tmpAVUrd2/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
    [Finished in 7.2s with exit code 1]
    [shell_cmd: python -u "/Users/anon/Dropbox/Programs/Proj/splinter2.py"]
    [dir: /Users/anon/Dropbox/Programs/Proj]
    [path: /usr/bin:/bin:/usr/sbin:/sbin]
    

    我已经用相同的标题(错误:“元素当前不可见,因此可能无法与selenuim交互”)标题检查过其他问题,但是由于Download按钮在我看来是可见的,因此我仍然无法解决此问题。

    任何帮助将非常感激

    编辑:

    每当我尝试使用browser = Browser('firefox', profile=profile)设置配置文件时,都会出现以下错误:
    Traceback (most recent call last):
      File "/Users/adb/Dropbox/Programs/Proj/Youtube Playlist MP3/splinter2.py", line 11, in <module>
        browser = Browser('firefox', profile=profile)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/splinter/browser.py", line 63, in Browser
        return driver(*args, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/splinter/driver/webdriver/firefox.py", line 23, in __init__
        firefox_profile = FirefoxProfile(profile)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/firefox/firefox_profile.py", line 77, in __init__
        ignore=shutil.ignore_patterns("parent.lock", "lock", ".parentlock"))
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 171, in copytree
        names = os.listdir(src)
    TypeError: coercing to Unicode: need string or buffer, FirefoxProfile found
    

    最佳答案

  • 当我使用browser.find_by_id('dl_link')。click()时,我的代码执行时没有任何错误,但browser.click_link_by_partial_text('Download')抛出了?

  • 因为您与“静态”元素互动。

    当您点击“转换视频”按钮时,您将刷新DOM。但是您的驱动程序仍然可以在旧DOM上运行。这就是为什么您找不到使用browser.click_link_by_partial_text('Download')的原因
  • 启动时,不会下载文件。为什么?

  • 可能是因为有一个弹出窗口询问您是否要保存并执行它。 Check this out

    关于python - Selenium :无法下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36495922/

    相关文章:

    Python:从每个打开的 Google Chrome 选项卡中获取所有 Urls

    python - 如何在 PyQt4 中创建多页应用程序?

    Python正则表达式字符串搜索返回起始索引

    python - python 中的位域特化

    linux - python错误 "AttributeError: '模块'对象没有属性 'sha1'“

    typescript - e2e测试在docker中失败,但在本地通过

    python - 如何从该应用程序中调用 Python Bottle API

    python - 动态创建具有继承和类方法的类列表

    python - 更高效/时尚的代码来转换数据结构

    ruby - Selenium Webdriver - 设置首选浏览器语言 DE