整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Playwright执行 JavaScript 脚本:探索浏览器自动化的新境界


我们在进行web自动化时,经常遇到一些不好操作的元素,普通的元素定位和操作容易报错,如果我们使用的selenium的话,就可以使用selenium调用js脚本进行操作。在playwright 中也有类似的方法,使用page.evaluate()执行JavaScript脚本。 page.evaluate()和page.evaluate_handle()之间的唯一区别是page.evaluate_handle()返回JSHandle。

  • page.evaluate() 返回调用执行的结果
  • page.evaluate_handle()返回JSHandle

page.evaluate()

返回evaluate() 返回执行JavaScript脚本的结果,使用示例如下:

pythonfrom playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto('https://www.baidu.com')

        print(page.evaluate("1 + 2"))

        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()

也可以执行一个函数,如下:

pythonfrom playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto('https://www.baidu.com')

        print(page.evaluate("() => '拜仁慕尼黑'"))

        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()

注:如果传递给page.evaluate()的函数返回一个不可序列化的值,则page.evaluate()解析为undefined

示例

  1. 打印网页标题

执行document.title 获取页面的title,代码如下:

pythonfrom playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto("https://www.baidu.com/")
        title = page.evaluate('document.title')
        print(title)
        page.pause()
        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()
  1. 操作元素示例
pythonfrom playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto("https://www.baidu.com/")
        js = """
            document.getElementById('kw').value='playwright';
            document.getElementById('su').click();
            """
        page.evaluate(js)
        page.pause()
        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()

页面如下:

page.evaluate_handle()

page.evaluate_handle()的返回值是JSHandle。

pythonfrom playwright.sync_api import sync_playwright

def run_js_script():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()
        page.goto("https://www.baidu.com/")
        a_handle = page.evaluate_handle("document.body")
        result_handle = page.evaluate_handle("body => body.innerHTML", a_handle)
        print(result_handle.json_value())
        result_handle.dispose()
        page.pause()
        # 关闭浏览器
        context.close()
        browser.close()

run_js_script()

总结

本文主要介绍了playwright执行js脚本的操作,与selenium一样,playwright同样可以执行js脚本来完成一些不便操作的元素。

买mate40,但总是抢不到,所以想试着能不能写个脚本代码。

第一步:把想要抢购的商品加进购物车,注意:脚本是对购物车内全部商品进行下单操作,所以不够买的商品最好先从购物车内删除。
第二步:写好Python脚本,在抢购之前运行,并设置好抢购时间。

私信小编01即可获取大量python学习资源

Python脚本实现

  • 安装Python。我安装的是anaconda
  • 安装webdriver扩展。它是Selenium模块的一部分。Selenium是一个用于Web应用程序测试的工具,用于测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。所以其实就是安装Selenium:Win+R,输入cmd,在命令行中输入pip show selenium
  • 安装chrome浏览器(因为我用的是谷歌)
  • 安装chromedriver。它是chrome的插件,是为了webDriver能通过操作chromedriver来控制chrome浏览器自动操作,如打开网页,点击按钮等操作。

下载地址:

http://chromedriver.storage.googleapis.com/index.html或者https://npm.taobao.org/mirrors/chromedriver/

**注意:下载时要根据电脑系统和chrome浏览器版本来选择对应的chromedriver版本。**可以通过浏览器右上角的三点→帮助→关于Google Chrome来查看自己的chrome版本。


下载chromedriver安装包后,进行解压,放在chrome安装的同级目录下,同时在环境变量PATH中添加路径。


然后用以下代码检验是否安装成功:


然鹅,此时我遇到了错误,如下


于是,我把chromedriver.exe放到了我python脚本的文件夹后,就完美解决问题了!


【补充】
我知道自己为什么出现上面那个错误了,因为路径没输入!
在下图所示红框处输入自己的下载的chromedriver安装路径即可成功运行。

完整的Python脚本代码如下:

avaScript 是网景(Netscape)公司开发的一种基于客户端浏览器、面向(基于)对象、事件驱动式的网页脚本语言。JavaScript语言的前身叫作Livescript。

JavaScript的特点:

  • 简单、易学、易用;
  • 跨平台;IE、Navigator
  • 符合ECMA(欧洲计算机制造协会)标准,可移植;
  • 事件驱动式的脚本程序设计思想;
  • 动态、交互式的操作方式。

JavaScript的作用:

  • 交互式操作;
  • 表单验证;
  • 网页特效;
  • Web游戏
  • 服务器脚本开发等。

JavaScript的编写环境:

文本编辑器

JavaScript的执行平台:

Web浏览器

JavaScript的执行方式:

解释执行(由上而下)

JavaScript的版本:

JavaScript1.0——JavaScript1.4

浏览器对JavaScript的支持:

JavaScript/IE3.0、JavaScript1.2/IE4.0;

微软允许用户自行设置对JavaScript处理模式。

JavaScript与Java、VBScript、JScript的关系:

JavaScript与Java的区别体现在:

首先,它们是两个公司开发的不同的两个产品,Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合于Internet应用程序开发;而JavaScript是Netscape公司的产品,其目的是为了扩展Netscape Navigator功能而开发的一种可以嵌入Web页面中的基于对象和事件驱动的解释性语言。

其次,JavaScript是基于对象的,而Java是面向对象的,即Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象和事件驱动的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用。

第三,两种语言在其浏览器中所执行的方式不一样。Java的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。JavaScript是一种解释性编程语言,其源代码在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户,由浏览器解释执行。

第四,两种语言所采取的变量是不一样的。Java采用强类型变量检查,即所有变量在编译之前必须作声明。JavaScript中变量声明,采用其弱类型。即变量在使用前不需作声明,而是解释器在运行时检查其数据类型。

第五,代码格式不一样。Java是一种与HTML无关的格式,必须通过像HTML中引用外媒体那么进行装载,其代码以字节代码的形式保存在独立的文档中。JavaScript的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态装载。编写HTML文档就像编辑文本文件一样方便。

第六,嵌入方式不一样。在HTML文档中,两种编程语言的标识不同,JavaScript使用<script>...</script>来标识,而Java使用<applet> ... </applet> 来标识。

第七,静态绑定和动态绑定。Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查,如不经编译则就无法实现对象引用的检查。JavaScript采用动态联编,即JavaScript的对象引用在运行时进行检查。

JavaScript学习教程

如果想要更高效、更系统地学会javascript,最好采用边学边练的学习模式。


今天分享的这套JavaScript学习教程,讲解了前端开发中的核心技术JavaScript,俗称JS

内容涵盖:JavaScript核心语法、JavaScript内置支持类、JavaScript调试、JavaScript DOM编程、JavaScript BOM编程、大量前端小案例、JavaScript事件处理、JavaScript对象、继承、JSON等知识点,该视频可以开启你的WEB前端之路。

课程目录

1. .JavaScript教程-JavaScript概述

2. .JavaScript教程-HTML嵌入JavaScript代码的第一种方式1

3. .JavaScript教程-HTML嵌入JavaScript代码的第一种方式2

4. .JavaScript教程-HTML嵌入JavaScript代码的第二种方式

5. .JavaScript教程-HTML嵌入JavaScript代码的第三种方式

6. JavaScript教程-JS的标识符

7. .JavaScript教程-JS的变量1

8. .JavaScript教程-JS的变量2

9. JavaScript教程-JS的函数初步1

10. .JavaScript教程-JS的函数初步2

11. .JavaScript教程-全局变量和局部变量

12. .JavaScript教程-JS的数据类型

13. .JavaScript教程-Undefined数据类型

14. .JavaScript教程-Number数据类型

15. .JavaScript教程-Boolean数据类型

16. .JavaScript教程-回顾数据类型

17. .JavaScript教程-String数据类型

18. .JavaScript教程-Object数据类型

19. JavaScript教程-Object数据类型2

20. .JavaScript教程-Object数据类型3

21. .JavaScript教程-null undefined NaN的区别以及等同和全等运算符

22. .JavaScript教程-JS的常用事件

23. .JavaScript教程-回调函数的概念

24. .JavaScript教程-注册事件的两种方式

25. JavaScript教程-JS代码的执行顺序

26. .JavaScript教程-JS代码的执行顺序2

27. JavaScript教程-捕捉回车键

28. .JavaScript教程-捕捉回车键2

29. .JavaScript教程-void运算符

30. .JavaScript教程-JS的控制语句

31. JavaScript教程-设置和获取文本框的value

32. JavaScript教程-innerHTML和innerText属性

33. .JavaScript教程-正则表达式

34. .JavaScript教程-邮箱地址的正则表达式

35. JavaScript教程-扩展字符串的trim函数

36. .JavaScript教程-回顾JS

37. JavaScript教程-表单验证

38. JavaScript教程-表单验证2

39. JavaScript教程-表单验证3

40. .JavaScript教程-表单验证4

41. .JavaScript教程-复选框的全选和取消全选

42. .JavaScript教程-获取下拉列表选中项的value

43. .JavaScript教程-周期函数setInterval

44. .JavaScript教程-内置支持类Array

45. .JavaScript教程-BOM编程window的open和close

46. .JavaScript教程-BOM编程弹出确认框

47. .JavaScript教程-(补录)-将当前窗口设置为顶级窗口

48. .JavaScript教程-BOM编程history和location对象

49. .JavaScript教程-JSON在开发中的使用

50. .JavaScript教程-JSON在开发中的使用2

51. JavaScript教程-JSON在开发中的使用3

52. .JavaScript教程-JSON在开发中的使用4

53. JavaScript教程-JSON在开发中的使用5

更多Java学习资料,获取方式:

关注+转发本文后私信扣“1”