iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Selenium浏览器自动化怎么上传文件
  • 596
分享到

Selenium浏览器自动化怎么上传文件

2023-06-29 21:06:47 596人浏览 泡泡鱼
摘要

这篇文章主要介绍“selenium浏览器自动化怎么上传文件”,在日常操作中,相信很多人在Selenium浏览器自动化怎么上传文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Selenium浏览器自动化怎么上

这篇文章主要介绍“selenium浏览器自动化怎么上传文件”,在日常操作中,相信很多人在Selenium浏览器自动化怎么上传文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Selenium浏览器自动化怎么上传文件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    Selenium 封装了现成的文件上传操作。但是随着现代前端框架的发展,文件上传的方式越来越多样。

    1. input 元素上传文件

    如果页面需要文件上传,那么在大多数情况下,都能在页面源代码中找到一个input的元素。

    <input type="file" name="file_name">

    如果能直接在页面当中看到这个input元素,那么通过 selenium 的 send_keys 方法就能完成文件的上传,在参数中传入本地文件的路径。

    driver.get('<https://testpages.herokuapp.com/styled/file-upload-test.html>')el = driver.find_element('id', "fileinput")el.send_keys('/path/of/file.png')

    2. input 元素隐藏

    通过修改元素属性,把隐藏的元素属性改掉。

    el = driver.find_element('xpath', '//input[@type="file"]')driver.execute_script('arguments[0].style.visibility=\\'visible\\'', el)el.send_keys(r'C:\\Users\\muji\\Desktop\\avatar.png')

    比如可以通过这种方式实现百度的以图搜图。

    driver.get('<Http://www.baidu.com>')driver.find_element('CSS selector', '.soutu-btn').click()time.sleep(3)el = driver.find_element('xpath', '//input[@type="file"]')driver.execute_script('arguments[0].style.visibility=\\'visible\\'', el)el.send_keys(r'C:\\Users\\muji\\Desktop\\avatar.png')

    3. 文件选择对话框

    对于有一些元素,直接通过 selenium 自带的 send_keys 方法上传文件并不会成功。如果不想对input元素进行过多的分析,那么比较直接的方式是采用文件上传对话框来处理。

    一般来说,如果需要上传文件,那么当你点击这个元素之后,会出现一个文件上传的对话框,要求你选择文件,并点击确定。这个对话框是属于系统的,因此selenium 无法直接控制它。我们可以采用系统的自动化工具或者直接调用键盘来操作这种对话框。

    在操作对话框之前,首先我们通过 selenium 点击文件上传的元素。

    el = driver.find_element('id', "fileinput")ActionChains(driver).click(el).perfORM()

    input 元素并不能点击,所以不能用元素的 el.click() 方法,需要使用 ActionChains 下面的 click 方法。他们之间的区别在于元素的 el.click 方法更加严格,会对元素是否可见,是否可点击进行检测,在点击事件完全生效后,再执行下面的操作,如果不满足这些条件,可能会报错。 而 Action 下的 click 方法则粗暴得多,它几乎不对对元素进行检测,直接把鼠标移动到元素上方,执行点击操作,至于点击是否生效,根本不管。

    4. 使用 pywinauto 上传文件

    pywinauto 是windows系统下的一个自动化工具,它可以直接获取到Windows系统下面的弹框,因此当文件上传的窗口出现之后,我们可以使用这个工具传入文件的路径,然后点击打开按钮。

    from pywinauto import Desktopapp = Desktop()dialog = app['打开']  # 根据名字找到弹出窗口dialog["Edit"].type_keys('/path/of/file.md')  # 在输入框中输入值dialog["Button"].click()

    另一种系统自动化工具叫做 pyautogui。这个工具最大的特点在于使用坐标系统定位元素,可以轻而易举的做到跨平台。不管你是Windows,Mac还是linux,都可以使用这款工具实现自动化。

    但是这款工具目前不支持中文的输入,因此我们需要借助剪切板来实现中输入。首先我们把对应的中文复制到剪切板当中,然后再通过 ctrl + v 热键粘贴到文件路径输入框当中。

    5. pyautogui

     import pyperclip pyperclip.copy('D:\\\\用户.html') pyautogui.hoTKEy('ctrl', 'v') pyautogui.press('enter', presses=2)

    键盘

    keyboard.write('C:\\\\Users\\\\muji\\\\Desktop\\\\avatar.png')time.sleep(1)keyboard.press('enter')

    注意:百度以图搜图禁用了爬虫,所以在上传文件时会提示「图片上传失败,请重新上传」。

    6. 并发问题

    通过系统窗口上传文件简单粗暴,但是当你的程序需要并发执行时,使用这种方式实现文件上传就比较麻烦了。如果你的程序需要并发执行,最好还是通过控制input元素,使用 send_keys 方法实现文件上传。

    到此,关于“Selenium浏览器自动化怎么上传文件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: Selenium浏览器自动化怎么上传文件

    本文链接: https://www.lsjlt.com/news/326413.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C++ 生态系统中流行库和框架的贡献指南
      作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
      99+
      2024-05-15
      框架 c++ 流行库 git
    • C++ 生态系统中流行库和框架的社区支持情况
      c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
      99+
      2024-05-15
      生态系统 社区支持 c++ overflow 标准库
    • c++中if elseif使用规则
      c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
      99+
      2024-05-15
      c++
    • c++中的继承怎么写
      继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
      99+
      2024-05-15
      c++
    • c++中如何使用类和对象掌握目标
      在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
      99+
      2024-05-15
      c++
    • c++中优先级是什么意思
      c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
      99+
      2024-05-15
      c++
    • c++中a+是什么意思
      c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
      99+
      2024-05-15
      c++
    • c++中a.b什么意思
      c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
      99+
      2024-05-15
      c++
    • C++ 并发编程库的优缺点
      c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
      99+
      2024-05-15
      c++ 并发编程
    • 如何在 Golang 中备份数据库?
      在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
      99+
      2024-05-15
      golang 数据库备份 mysql git 标准库
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作