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

execute_script:同步执行——罕用

execute_async_script:异步执行

利用场景1:工夫输入框

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

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

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

from selenium import webdriverfrom time import sleepdriver = 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 语句形容
1document.documentElement.scrollTop=1000挪动到间隔顶部 1000 的地位
2window.scrollTo(0, document.body.scrollHeight*0.5)按高度比例挪动到相对地位(x轴方向, y轴方向)
3window.scrollTo(0, 1000)挪动到相对坐标地位(x轴方向, y轴方向)
4window.scrollBy(0, -200)绝对以后坐标挪动相应间隔(x轴方向, y轴方向)
from selenium import webdriverfrom time import sleepdriver = 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)"  # 绝对以后地位向上挪动 500driver.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()  # 敞开浏览器

总结