1.首先,我们列出Selenium 对JS元素操作的4中方法:
- 增加属性
driver.execute_script(“arguments[0].%s=arguments[1]” %attributeName,elementObj, value)
- 修改属性
driver.execute_script(“arguments[0].setAttribute(arguments[1],arguments[2])”, elementObj, attributeName, value)
- 获取属性
elementObj.get_attribute(attributeName)
- 删除属性
driver.execute_script(“arguments[0].removeAttribute(arguments[1])”,elementObj, attributeName)
attributeName 就是属性名字 elementObj 就是元素对象 value 就是值
2.就 '增加属性方法 ',我们具体的讲解一下:
我们要讲解的一个具体的案列是这样的:
分析一下:
图片的左侧是一个表单,有" 开始时间" ,"结束时间"和 “导出类型”。我们想要的结果就是,通过selenium 给 “开始时间” 和 “结束时间” 传递时间戳。
图片的右侧是对应的html 代码,观察可以发现是一个 form 表单,输入框是一个input 标签,然后再发送Post请求。
在此之前,我尝试过用driver.send_keys()
方法,传递数据,但是由于格式混乱,导致失败了。
下面的这张照片就是我想要的结果,只是我是想通过selenium 去实现而已。
上代码:
# 获取开始时间对象 添加开始时间
start_time = short_driver.find_elements_by_xpath("//div[@class='info_box']/div[1]/input[@name='start_time']")[0]
short_driver.execute_script("arguments[0].%s=arguments[1]" % 'value', start_time, '2019-09-12')
# 获取结束时间对象 添加截止时间
end_time = short_driver.find_elements_by_xpath("//div[@class='info_box']/div[2]/input[@name='end_time']")[0]
short_driver.execute_script("arguments[0].%s=arguments[1]" % 'value', end_time, '2019-09-29')
down_click = short_driver.find_elements_by_xpath("//button[@class='but']")[0]
down_click.click()
time.sleep(2)
程序执行之后,是这样的结果,也就是我想要的结果:
仔细观察右侧的 input 标签,已经多了一个value=“2019-09-12” , value=“2019-09-29” 属性和属性值。
之后,就可以去点击"导出" ,下载音频数据了。