前几周周末,没事的时候帮女朋友看她要完成的任务,其实就是想抓取网页里的数据然后分析完成后再做预警功能。在实现的过程里也出现了不少坑,在这里可以分享下。
1. 关于Chrome Driver, 因为官方的被墙,所以最省事的路径还是参考taobao的镜像: http://npm.taobao.org/mirrors/chromedriver 。下载相应的驱动到本地,然后注明打开路径。
2.关于定位UI控件,个人感觉最高效的还是使用XPath, 在Element里,找到所在控件的位置,点右键-复制-复制XPath,这样的话很高效,不用自己分析是哪个class,或者哪个Tag。
3. 如果出现‘Can not focus element', 这种问题是因为Selenium找不到符合输入的控件。对于输入框来讲,我们要找到最里面的Input Text所对应的Xpath,而不是上面的span。
4. 关于Switch的问题。一般我们在一个网页里,可以内嵌一个html,后者跳转到另外一个窗口。所以必须明确你当前所定位的位置是哪个窗口的哪个IFrame,不然会找不到元素。可以用下面两个方法:
1. 拿到window handler, 然后driver.switchTo().window(windowHandle)。
2. 找到当前元素所在的Frame XPath,然后Driver.switchto().frame(Frame path)
5. 关于Decode和Encode的问题。在不同的系统上,处理方法不一样:
在Mac上,可以打开保存的CSV文件,点击另存为的时候会出现保存的默认编码方式,我的Mac系统上是UTF-16。应该是跟Mac的版本有关系。
在Windows上,就比较有意思。因为各个厂商对编解码的规则不一样,试了很久最终用utf_8_sig 解决问题。