欢迎来到魔幻小生的博客

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)

image

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

posted @ 2025-07-12 23:21  魔幻小生  阅读(48)  评论(0)    收藏  举报