Selenium 提供了两种执行 JavaScript 脚本的方法:
execute_script
:同步执行——常用
execute_async_script
:异步执行
应用场景1:时间输入框
有些时间输入框控件,添加了 readonly
属性,限制该控件只读,不可写入,那就无法直接通过 send_keys()
输入内容。
对于这种情况的处理方式及步骤:
- 通过 JavaScript 脚本移除
readonly
属性- 清空输入框内容
- 按时间格式输入信息
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome() # 打开浏览器
driver.get("https://www.12306.cn/index/") # 跳转至测试页面
sleep(1)
js = "document.getElementById('train_date').removeAttribute('readonly')" # 编写 JavaScript 语句移除 readonly 属性
driver.execute_script(js) # 同步执行 JavaScript 语句
element = driver.find_element_by_id("train_date") # 定位元素
element.clear() # 清空内容
sleep(1)
element.send_keys("2020-08-10") # 输入内容
sleep(2)
driver.quit() # 关闭浏览器
应用场景2:操作滚动条
操作滚动条常用的 JavaScript 语句:
序号 | JavaScript 语句 | 描述 |
---|---|---|
1 | document.documentElement.scrollTop=1000 | 移动到距离顶部 1000 的位置 |
2 | window.scrollTo(0, document.body.scrollHeight*0.5) | 按高度比例移动到绝对位置(x轴方向, y轴方向) |
3 | window.scrollTo(0, 1000) | 移动到绝对坐标位置(x轴方向, y轴方向) |
4 | window.scrollBy(0, -200) | 相对当前坐标移动相应距离(x轴方向, y轴方向) |
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome() # 打开浏览器
driver.get("https://www.douban.com/") # 跳转至测试页面
sleep(1)
js1 = "document.documentElement.scrollTop=500" # y轴方向 移动到距离顶部 500 的位置
js2 = "window.scrollTo(0, document.body.scrollHeight*0.5)" # y轴方向 移动到坐标为总高度的50% 的位置
js3 = "window.scrollTo(0, 1000)" # y轴方向 移动到高度为 1000 的位置
js4 = "window.scrollBy(0, -500)" # 相对当前位置向上移动 500
driver.execute_script(js1) # 执行 JavaScript 语句
sleep(3)
driver.execute_script(js2) # 执行 JavaScript 语句
sleep(3)
driver.execute_script(js3) # 执行 JavaScript 语句
sleep(3)
driver.execute_script(js4) # 执行 JavaScript 语句
sleep(3)
driver.quit() # 关闭浏览器
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。