美文网首页
Python3 ExecJS爬坑

Python3 ExecJS爬坑

作者: flashine | 来源:发表于2018-11-23 11:44 被阅读0次

0x00 模块安装

参考官方文档安装

pip install PyExecJS 

0x01 配置

该模块需要JS运行时环境
以下JS runtime经过官方测试认可,建议采用

以下JS runtime也支持但未经过官方测试

  • Apple JavaScriptCore - Included with Mac OS X
  • JScript :windows自带JS解释器,IE浏览器
  • SlimerJS

注:对于PyV8模块目前google上只提供了支持Python2的模块安装,尚不支持Python3,使用pip直接安装时会报错。经过各种搜索,提示需要更新pip和setuptools到最新版,依然无法解决。
对于使用JScript环境的用户,只要在IE浏览器下运行无报错的js代码也可直接运行,不需要另外安装运行时环境

0x02 代码编写

js代码执行之前需要在运行时环境下编译才能执行
  由于该js环境下没有windowdocument对象,也没有console面板,因此在使用某些基于浏览器的原生对象在编译过程时会报错。所以在使用compile函数时尽量以函数的形式来写js代码,方便Python调用。

import execjs

name = execjs.get().name # 获取JS的运行时名称,写代码时可不写
ctx = execjs.compile("""
       function add(x, y) {
               return x + y;
          }
""") # 获取代码编译完成后的对象
 ctx.call("add", 1, 2) # 调用js函数add,并传入它的参数
 ctx.eval("add({0}, {1})").format(1,2) # 使用eval的写法同上,但是在传入字符串或者其他类型的数据时需要添加对应的格式,如下所示,具体可在程序中debug
 ctx.eval('add("{0}", "{1}")').format("1","2")

另外有时候js代码过长,我们可以将js代码先保存到文件中。
  由于历史遗留问题,ExecJS以前使用python2编写的,所以在代码实现过程中会涉及到文件编码的问题。ExecJS先将js代码读到内存中,然后再把调用js的代码和js文件的代码一同写入到一个临时文件(C:\Users\user\AppData\Local\Temp\xx.js)中,如果js文件采用的是UTF-8编码,那么在写入到临时文件时,模块会报UnicodeEncodeError: 'gbk' codec can't encode character xxx ,主要是因为模块在进行文件写入时采用的是windows的默认编码gbk,而没有指定encoding=utf-8,所以js文件需要以gbk编码保存。

import execjs

with open(r"C:\Users\user\Desktop\security.js", 'r') as f:
       content = f.read() #读取js文件的全部内容到content变量中
ctx = execjs.compile(content)
jscode = 'getkey("{0}","10001","{1}")'.format(username, pubkey)
print(ctx.eval(jscode))

相关文章

  • Python3 ExecJS爬坑

    0x00 模块安装 参考官方文档安装 0x01 配置 该模块需要JS运行时环境以下JS runtime经过官方测试...

  • install scrapy on mac osx

    又是python3,发现坑真多,能不能好好用python3了... macosx安装scrapy的坑真多,纪录一下...

  • python3 scrapy 爬虫实战之爬取站长之家

    爬取目标 站长之家:http://top.chinaz.com/all/ 爬取工具 win10 python3 ...

  • 0.Python 爬虫之Scrapy入门实践指南(Scrapy基

    [TOC] 0.0、Scrapy基础 Python2:适合爬取非中文 Python3:适合爬取中文 Scrapy是...

  • python3调用js的库之execjs

    针对现在大部分的网站都是使用js加密,js加载的,并不能直接抓取出来,这时候就不得不适用一些三方类库来执行js语句...

  • 爬坑

    文文很郁闷,最近他遇到一件不公平的事,在他看来,这是非常非常明显的不公平。 前段时间,公司要提拔一位主管,...

  • 爬坑

    伸手要钱的日子真不好过,无论是和父母,还是和爱人,她们嘴上说的好听,一旦你伸手要了,脸色立马变得难看了起来。谈钱注...

  • 爬坑

    经过了一年左右的痛苦煎熬,最近感觉快要从去年的那种浑浑噩噩的状态中解脱出来了。催收电话打来,想接就接,不想接就挂掉...

  • Python爬虫杂记 - python运行js

    execjs 使用 1. 安装 2. 简单使用 需要注意的是: 个别的JS语句, 用execjs返回的结果跟浏览器...

  • scrapy里面item传递数据后数据不正确的问题

    在上篇文章《python3 + scrapy 爬取妹子图 (meizitu.com)》中,我爬取了妹子图网站的图片...

网友评论

      本文标题:Python3 ExecJS爬坑

      本文链接:https://www.haomeiwen.com/subject/gyfjqqtx.html