selenium自动化之Headless模式下上传图片

文章介绍了在无头浏览器模式下,如何使用JavaScript修改页面属性来处理隐藏的上传按钮,从而实现使用Selenium进行图片上传。当input标签被隐藏时,通过改变其上级div的style.display属性为block,可以使上传按钮可见,然后利用Selenium的send_keys方法上传文件。
摘要由CSDN通过智能技术生成

headless mode,无头模式。Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。对于需要在无头模式下运行的项目,selenium的send_keys、win弹窗、或者借助第三方工具Autolt等传统方式并不能满足上传图片/文件的需求。此时需要借助JS修改页面属性进行上传。

有些上传图片的元素隐藏了input标签的属性,此时若用send_keys方法直接上传的话selenium会报错,如图所示,下面上传图片的元素隐藏了一个Upload按钮:

可以看到input标签的上级div标签存在一个style=display:none的属性,此时更改style属性的值,即可将upload按钮显示出来:

此时再用selenium的send_keys方法即可正常上传图片此方法适用于headless模式下上传图片的情况,但仅限于标签名为input,type='file'属性的文件上传表单

示例代码如下:

js='var q=document.evaluate("{}", document).iterateNext();q.{} = {};'.format("//form[@class='el-form el-form--label-top']//div[@class='upload-box']/div[1]//button[@class='el-button el-button--default']/../..",'style.display','\"block\"') #更改input上级标签div的style属性。'//form[@class='el-form el-form--label-top']//div[@class='upload-box']/div[1]//button[@class='el-button el-button--default']/../..'为需要更改的属性的标签定位;'style.display'为需要更改的属性;'\"block\"'为更改后的值
driver.execute_script(js) #执行js
driver.find_element_by_css_selector('.el-upload__input').send_kyes('test.jpg')#定位input标签,上传图片

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值