前言

之前经常使用 execute_script() 方法执行 JavaScript 的来解决页面上一些 selenium 无法操作的元素,但是一直无法获取执行的返回值。

最近翻文档,发现 execute_script 是可以拿到 JavaScript 执行后的返回值的

演示案例

目标元素元素属性

博客园

我们可以在浏览器 Console 执行 JavaScript 获取到元素的文本属性值

document.getElementById("blog_nav_sitehome").innerText;

但是在代码里面执行的时候,却拿不到返回值

from selenium import webdriver

# 作者-上海悠悠 QQ交流群:717225969

# blog地址 https://www.cnblogs.com/yoyoketang/

driver = webdriver.Chrome()

driver.get("https://www.cnblogs.com/yoyoketang/")

# 定位博客首页 "博客园" 按钮

# 博客园

js_blog = 'document.getElementById("blog_nav_sitehome").innerText;'

blog = driver.execute_script(js_blog)

print(blog)

运行后结果返回 None,之前一直没找到解决办法,最近翻文档发现需在 JavaScript 脚本前面加 return 即可解决

return 返回值

在 JavaScript 脚本前面加 return 获取返回值,修改后如下

from selenium import webdriver

# 作者-上海悠悠 QQ交流群:717225969

# blog地址 https://www.cnblogs.com/yoyoketang/

driver = webdriver.Chrome()

driver.get("https://www.cnblogs.com/yoyoketang/")

# 定位博客首页 "博客园" 按钮

# 博客园

js_blog = 'return document.getElementById("blog_nav_sitehome").innerText;'

blog = driver.execute_script(js_blog)

print(blog)

再次执行就能得到结果:博客园

返回 JavaScript 元素对象

JavaScript 定位到的元素对象也能返回给 selenium, 拿到元素对象后也可以继续操作

from selenium import webdriver

# 作者-上海悠悠 QQ交流群:717225969

# blog地址 https://www.cnblogs.com/yoyoketang/

driver = webdriver.Chrome()

driver.get("https://www.cnblogs.com/yoyoketang/")

# 定位博客首页 "博客园" 按钮

# 博客园

js_blog = 'return document.getElementById("blog_nav_sitehome");'

blog = driver.execute_script(js_blog)

print(blog) # 返回元素对象

# 获取元素属性

t = blog.text

print(t)

# 获取元素 href 属性

link = blog.get_attribute("href")

print(link)

# 点击元素

blog.click()

运行后结果:

博客园

https://www.cnblogs.com/

jquery 使用

上面的 JavaScript 方法同样适用于 jquery 定位元素和操作元素

from selenium import webdriver

# 作者-上海悠悠 QQ交流群:717225969

# blog地址 https://www.cnblogs.com/yoyoketang/

driver = webdriver.Chrome()

driver.get("https://www.cnblogs.com/yoyoketang/")

# 定位博客首页 "博客园" 按钮

# 博客园

# js_blog = 'return document.getElementById("blog_nav_sitehome");'

# jquery 也适用

jq_blog = "return $('#blog_nav_sitehome')[0];"

blog = driver.execute_script(jq_blog)

print(blog) # 返回元素对象

# 获取元素属性

t = blog.text

print(t)

# 获取元素 href 属性

link = blog.get_attribute("href")

print(link)

# 点击元素

blog.click()

运行后结果:

博客园

https://www.cnblogs.com/

需要注意的是 jquery 并不是适用所有的 web 网页,需页面有加载 jquery 的 js 文件

python数据库execute返回值_selenium+python自动化101-使用execute_script() 方法获取 JavaScript 返回值...相关推荐

  1. python 数据库 实战_干货!python与MySQL数据库的交互实战

    鼠年大吉 HAPPY 2020'S NEW YEAR 1 安装pymysql库 如果你想要使用python操作MySQL数据库,就必须先要安装pymysql库,这个 库的安装很简单,直接使用pip i ...

  2. python数据库操作常用功能使用详解(创建表/插入数据/获取数据)

    实例1.取得MYSQL版本 # -*- coding: UTF-8 -*- #安装MYSQL DB for python import MySQLdb as mdb con = None try:#连 ...

  3. python中prompt的意思_selenium+Python(alert 、confirm 、prompt 的处理)

    alert\confirm\prompt 弹出框操作主要方法有: text 返回 alert/confirm/prompt 中的文字信息 accept 点击确认按钮 dismiss 点击取消按钮,如果 ...

  4. 【Android】TypedArray——三个方法获取dimen返回值的类型

    三个方法:getDimension().getDimensionPixelOffset().getDimensionPixelSize() 方法名 返回值类型 getDimension() 是后两个方 ...

  5. jquery取值,赋值,以及下拉框获取选中value值

    太长时间不用基础的jquery语法,该忘的,不该忘的,都忘的差不多了.这里重新拾起一些简单的jquery知识. 一.jquery获取元素的值 (1)通过name属性获取元素的value值 //假如是获 ...

  6. python手机连续点击脚本_selenium+python自动化86-循环点击遇到的坑

    selenium定位一组元素,批量操作循环点击的时候会报错:Element not found in the cache - perhaps the page has changed since it ...

  7. python的selenium自动化测试公路_selenium+python自动化测试

    F12: 右键   选择复制  path from selenium import webdriver import time driver = webdriver.Chrome() driver.g ...

  8. python自动登录qq邮箱_selenium+python实现自动登陆QQ邮箱并发送邮件功能

    本期做一个selenium详细实例,会把我在元素定位中遇到的一些阻塞和经验分享给大家. (浏览器为Chrome) (如果只需要最终的完整代码,请直接跳转到文章最后) 浏览器打开QQ邮箱登录网址 fro ...

  9. python数据库分层设计_基于Python的高中教学数据库设计

    文章对 Python 进行概述,并 对数据库的操作模式进行分析, 对数据库系统编译平台的目标指 令介绍,并对高中教学数据库的 设计进行研究. 摘 要 1 Python概述 计算机程序设计语言( Pyt ...

最新文章

  1. sqlserver 字段中只有年月 加上中文年月_PowerBI 10月更新,全新图标正式亮相
  2. 2013.10u-boot移植之SD保存环境变量
  3. 数字签名与HTTPS详解
  4. lcd屏幕抖动_电视屏幕面板大科普!买电视之前必看!
  5. ssrs 生成pdf_在SSRS报告中生成热图的可用选项
  6. mysql实训报告_MySQL实验报告
  7. oracle11g是什么语言,oracle11g下载
  8. NFC Reader Tool 蓝牙NFC读写器使用教学
  9. DbgView远程调试
  10. 中通2008通信概预算编制系统简介
  11. p750服务器配置信息,P750的一些配置
  12. 拥有多丽体质特膳 你也能和女神般光彩照人
  13. 网吧用计算机性能配件清单,网吧组装电脑配置清单
  14. c语言游戏菜单栏界面设计,俄罗斯方块——菜单和游戏界面.cpp
  15. 201771010137 赵栋《面向对象程序设计(java)》第十六周学习总结
  16. mysql 递归 性能_MySQL优化总结+自定义函数之递归
  17. gunicorn + Flask架构中使用多进程全局锁
  18. VC6代码移植VS2008的SDK总结,包括OPENGL和DireX还有Cimage 【总结】
  19. redist 在linux上的安装教程
  20. Win7上通过DckerToolbox部署OnlyOffice

热门文章

  1. SAP WebIDE登录时,有时会发生超时现象
  2. 新浪微博和SAP CRM Interaction Center(呼叫中心)的集成
  3. SAP UI5 why failed to load 'sap/cus/crm/lib/reuse/library.js' from resources/sap/cus/crm
  4. footer bar in SAP Fiori as a service
  5. SAP OData schema version and backend version
  6. Provisional headers are shown in Chrome network tab
  7. cross component navigation in HCP
  8. 利用ABAP调试器脚本修改数据库表的值
  9. Cannot find source code based button in SE24
  10. Database specific hint in One order search