SeleniumBase choose_file 上传文件时的处理-使用笔记(四)

自动化福音(爬虫、办公、测试等) SeleniumBase 使用笔记(四)

SeleniumBase choose_file 上传文件时的处理

我们知道 SeleniumBase 上传文件,可以直接使用 self.choose_file(selector, file_path, by="css selector",timeout=None) 方法

目录

  1. 常规上传
  2. 非常规情况上传

常规情况上传

常规情况下,我们会有一个页面上直接找到<input type="file">的输入框
image

# 常规情况处理很简单,直接对 input 用
self.choose_file('input[type="file"]', f'temp/upload_file/图片.jpg')  # 上传

非常规情况上传

这里是指的是,需要点击上传元素后,才会显示出<input type="file">的输入框,但是点击后,系统会弹出 文件选择框,如下图,只有点击上传后才会在整个body中添加<input type="file">的输入框
image

# 第1步,执行 JS 来禁用每个 <input type="file"> 元素的内部 click,使其被点击后,不会打开系统文件选择框
# 禁用方法1
self.execute_script("HTMLInputElement.prototype.click = function() {if(this.type !== 'file') HTMLElement.prototype.click.call(this);};")

# 禁用方法2
self.execute_script("""HTMLInputElement.prototype.click = function () {
    if (this.type !== 'file') {
        HTMLElement.prototype.click.call(this);
    } else if (!this.parentNode) {
        this.style.display = 'none';
        this.ownerDocument.documentElement.appendChild(this);
        this.addEventListener('change', () => this.remove());
    }
}""")

# 第2步,点击上传元素
self.click('#files .upload-img')

# 第3步,上传
self.choose_file('input[type="file"]', f'temp/upload_file/图片.jpg')  # 上传

Selenium Close File Picker Dialog
GitHub SeleniumBase
本文章的原文地址
GitHub主页

posted @ 2024-07-18 16:15  星尘的博客  阅读(35)  评论(0编辑  收藏  举报