Selenium 提供了两种执行 JavaScript 脚本的办法:
execute_script
:同步执行——罕用
execute_async_script
:异步执行
利用场景1:工夫输入框
有些工夫输入框控件,增加了 readonly
属性,限度该控件只读,不可写入,那就无奈间接通过 send_keys()
输出内容。
对于这种状况的解决形式及步骤:
- 通过 JavaScript 脚本移除
readonly
属性- 清空输入框内容
- 按工夫格局输出信息
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 语句 | 形容 |
---|---|---|
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 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() # 敞开浏览器