乐趣区

关于selenium:Selenium-执行JavaScript语句

Selenium 提供了两种执行 JavaScript 脚本的办法:

execute_script:同步执行—— 罕用

execute_async_script:异步执行

利用场景 1:工夫输入框

有些工夫输入框控件,增加了 readonly 属性,限度该控件只读,不可写入,那就无奈间接通过 send_keys() 输出内容。

对于这种状况的解决形式及步骤:

  1. 通过 JavaScript 脚本移除 readonly 属性
  2. 清空输入框内容
  3. 按工夫格局输出信息

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

总结

退出移动版