selenium 执行 JavaScript 脚本
JavaScript简介
-
javascript 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言
-
可以嵌入到 html 页面对浏览器事件做出响应
-
可以基于 Node.js 技术进行服务器端编程
-
使用场景:部分场景使用 selenium 原生方法无法解决,例如,修改时间控件,滚动到某个元素,其他场景
-
浏览器 F12 控制台可以调试 js 脚本
selenium 中调用 js
execute_script(): 执行js
return execute_script('js脚本'): 返回js返回结果
execute_script: arguments传参
例一:滑动
打开百度搜索内容,滑动到底部点击‘下一页’
# 向下滑动10000个像素点
document.documentElement.scrollTop=10000
# 指定到滚动的位置
document.querySelector("css表达式").scrollIntoView()
def test_js_scroll(self):
self.driver.get('http://www.baidu.com/')
self.driver.find_element(By.ID, 'kw').send_keys('selenium')
# 执行js返回‘搜索’按钮的ID,用return返回js结果
element = self.driver.execute_script("return document.getElementById('su')")
element.click()
# 执行js滑动到页面底部
self.driver.execute_script('document.documentElement.scrollTop=10000')
self.driver.find_element(By.XPATH, '//*[@id="page"]/div/a[10]').click()
time.sleep(5)
例二:操作时间控件
大部分时间控件是 readonly 属性,处理时先取消 readonly 属性,再给 value 赋值
打开 12306 官网,修改出发日期到 2025-01-01
def test_time(self):
self.driver.get('https://www.12306.cn/index/')
self.driver.execute_script('a = document.getElementById("train_date");'
'a.removerAttribute("readonly");'
'a.value="2025-01-01";')
time.sleep(5)

实际测试看现在的12306官网时间控件没有 readonly 属性,不需要取消

浙公网安备 33010602011771号