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() # 敞开浏览器
总结