首先恭喜你!选择 Python 而不是其它的 XXX 来尝试解决一个实际的问题,几乎比选择任何其它的程序语言都更接近解决方案。但我不会把你直接扔到答案面前;我要拉你往回走一步:
当我们说 Python 好用的时候,我们在说什么?
编程其实可以被分为两个完全不同的方向:为解决存在的问题而编程,和为寻找可能性而编程。有些「通用」语言会横跨两个方向,如 C++ 就是这样的例子;更多的语言实际上偏向于其中一个方向。Python,Golang 一般被认为以快速解决特定问题为主要设计目标;相对的,Haskell、Clojure 等语言则着力于凸显内部逻辑的一致性。
因此,如果你的目标是完成一些自动化的任务,选择 Python 是一个非常好的开始。原因有两点:1、Python 本身语法简单,因此不需要浪费太多时间在语言本身上;2、Python 有大量的工具完成特定的任务。但是要找到合适的工具,你需要了解你的任务,即「问题域」。
回到你的例子中来说好了。你的目标是用程序自动完成一些你在浏览器中的操作(如上传文件),那么在尝试寻找和使用工具之前,你应该先充分理解这个问题本身:「上传文件」实际是一个什么样的过程?最明显的两点是,这个过程:从浏览器中完成
与网站进行交互
那么要让程序自动完成这个过程,可以从两个方向下手:
- 从浏览器中完成
- 如何用程序操作浏览器?
- 网站测试工具:Selenium
- 图形界面自动化:鼠标精灵 / Automator / VBS / Apple Script
- 与网站进行交互
- 程序如何与网站进行交互?
- HTTP协议:urllib / requests
- 模拟浏览器:PhantomJS / node-webkit
上面列的只是解决这个问题的不同方向;真正要解决,需要挑一个方向,熟悉相关的工具,不断尝试,直到确定达到目标,或者确定受到条件限制必须改变方向。这里需要的就是耐住性子读文档、写代码、分析错误、修改代码而已,「无他,唯手熟耳」。
如果你要问,「我怎么知道有这么多方法?」答案和上一条也是一样的,「无他,唯手熟耳」。经验涉及的方向足够广泛之后,解决方法总会手到擒来;而积累经验的前提,总是打好基础。打好基础知识必须靠多读书读好书,最简单快捷的方法其实是直接学习一些 IT 专业的入门课程(如 [1] / [2] 或其它国外学校 IT 专业大一的课程)以获得一个较为全面的了解。作为 IT 学科中的「通识」数据结构和算法、操作系统和网络通信协议的入门知识,几乎对于任何方向的深入都会起到重要的作用。有了这些基础的概念之后,再对相关领域进行深入。如果你的关注点在于 web 开发,则 HTML5 / JavaScript / CSS 相关的入门练习是必不可少的;如果关注点是网络通信,则 [3] 这样的经典几乎是不能不读的。书读的足够多,涉及的范围足够广,碰到特定问题的时候,自然就会有现成的解法自动的「匹配」到问题上。
说到底,IT 毕竟已经是一个相对成体系的学科了。想要用 IT 的方法解决问题,跟着专业培训的方向入门,总是最可靠的方法。
[1] MIT OCW Information Technology I Lecture Notes
[2] MIT OCW Information Technology Essentials Lecture Notes