测试工具之python selenium 编码问题
白羽 2018-12-26 来源 :网络 阅读 567 评论 0

摘要:本文将带你了解测试工具python selenium 编码问题,希望本文对大家学测试工具有所帮助。

    本文将带你了解测试工具python selenium 编码问题,希望本文对大家学测试工具有所帮助。



   

  #coding=utf-8

  from selenium   import webdriver

  driver = webdriver.Firefox()

  driver.get("//www.baidu.com")

  # 返回百度页面底部备案信息

  text =   driver.find_element_by_id("cp").text

  print(text)

  driver.close()

   

  认识常见编码

  GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码

  GBK   是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名

  cp936:中文本地系统是Windows中的cmd,默认codepage是CP936,cp936就是指系统里第936号编码格式,即GB2312的编码。

  (当然有其它编码格式:cp950   繁体中文、cp932 日语、cp1250   中欧语言。。。)

  Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

  UTF-8   (8-bit Unicode Transformation Format)是最流行的一种对 Unicode 进行传播和存储的编码方式。它用不同的   bytes 来表示每一个代码点。ASCII 字符每个只需要用一个 byte ,与 ASCII 的编码是一样的。所以说 ASCII 是 UTF-8   的一个子集。

  在开发Python程序的过程中,会涉及到三个方面的编码:

  Python程序文件的编码

  Python程序运行时环境(IDE)的编码

  Python程序读取外部文件、网页的编码

  Python程序文件的编码

  例如:

  Python2自带的IDE,当创建了一个文件保存的时候提示:

     

  这是因为Python2编辑器默认的编码是ASCII,它是无法识别中文的,所以会弹出这样的提示。这也是我们在大多情况下写python2程序的时候习惯在程序的第一行加上:#coding=utf-8

  其实,这里的编码文件是很容易解决的。

  Python程序运行时环境(IDE)的编码

  执行下面的一段程序。

  #coding=utf-8

  from selenium import   webdriver

  driver = webdriver.Firefox()

  driver.get("//www.baidu.com")

  #   返回百度页面底部备案信息

  text = driver.find_element_by_id("cp").text

  print(text)

  driver.close()

   

  在windows   cmd下执行:

   

  我们要获取的信息是:

  ?2015   Baidu 使用百度前必读 意见反馈 京ICP证030173号

  Windows cmd   用的是cp936,也就是中文的GB2312,在GBK的字符集里没有“?”,这就导致通过GBK解析的时候出现编码问题。

  这就像你在翻译英文的时候,出现了一个单词,这个单词你查遍了牛津大词典都没找到对应的含义解释,那么自然是会有问题的。

  那假设,我还就想在cmd下执行这个python程序了,那么可以去修改cmd的默认编码类型为utf-8,对应的编码为CHCP   65001(utf-8)。在cmd 下输入:chcp 65001 命令回车。

     

  然后,修改cmd的字体为“Lucida   Console”,再来执行程序就可以被正确输出了。

   

  Python程序读取外部文件、网页的编码

  #这一块,暂时没有找到合适的例子

  查看Python系统编码

  查看Python2   或Python3的系统编码。

  Python2:

  Python 2.7.10   (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on   win32

  Type   "copyright", "credits" or "license()" for more   information.

  >>> import sys

  >>>   sys.getdefaultencoding()

  'ascii'

  Python3:

   

  Python 3.5.0 (v3.5.0:374f501f4567, Sep 13   2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32

  Type   "copyright", "credits" or "license()" for more   information.

  >>> import sys

  >>>   sys.getdefaultencoding()

  'utf-8'

   

  那么如何修改Python2的系统编码为urf-8呢?

  import   sys

  reload(sys)

  sys.setdefaultencoding('utf-8')

   

  所以,在你的程序执行的过程中,遇到下面的报错信息时。

  UnicodeEncodeError:   'ascii' codec can't encode characters in position   0-1....    

  可以将上面的三行代码加到Python程序的头部。

  decode()与encode()    

  decode   的作用是将其他编码的字符串转换成 Unicode 编码,eg   name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码。

  encode   的作用是将Unicode编码转换成其他编码的字符串,eg   name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码。

  例如,前面获取百度底部信息的例子。我还可以通过decode()与encode()来解决:

  #coding=utf-8

  from selenium   import webdriver

  driver = webdriver.Chrome()

  driver.get("//www.baidu.com")

  #   返回百度页面底部备案信息

  text =   driver.find_element_by_id("cp").text

  text2 =   text.encode("gbk","ignore").decode("gbk")

  print(text2)

   

  这里通过encode()将Unicode编码转换成gbk编码,在转换的过程中通过“ignore”忽略掉gbk不能识别的字符(?),然后再把gbk转换成Unicode编码。当然,这并不是一种完美的方式,毕竟牺牲部分字符串。

  chardet模块

  chardet是一个非常优秀的编码识别模块。

  通过pip   安装:

  >pip   install   chardet    

  使用:

  >>> from chardet import   detect

  >>> a =   "中文"

  >>> detect(a)

  {'confidence':   0.682639754276994, 'encoding':   'KOI8-R'}

   

  大概有68%的把握为KOI8-R编码类型。


   
                   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试工具频道!



本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程