龙岩百度推广,seo中国,广州做网站找哪个公司好,石家庄建网站挣钱优帮云Selenium 封装了现成的文件上传操作。但是随着现代前端框架的发展#xff0c;文件上传的方式越来越多样。而有一些文件上传的控件#xff0c;要做自动化控制会更复杂一些#xff0c;这篇文章主要讨论在复杂情况下#xff0c;如何通过自动化完成文件上传。 1. input 元素上传…
Selenium 封装了现成的文件上传操作。但是随着现代前端框架的发展文件上传的方式越来越多样。而有一些文件上传的控件要做自动化控制会更复杂一些这篇文章主要讨论在复杂情况下如何通过自动化完成文件上传。 1. input 元素上传文件
如果页面需要文件上传那么在大多数情况下都能在页面源代码中找到一个input的元素。
input typefile namefile_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[typefile])
driver.execute_script(arguments[0].style.visibility\\visible\\, el)
el.send_keys(rC:\\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[typefile])
driver.execute_script(arguments[0].style.visibility\\visible\\, el)
el.send_keys(rC:\\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 方法则粗暴得多它几乎不对对元素进行检测直接把鼠标移动到元素上方执行点击操作至于点击是否生效根本不管
现在我也找了很多测试的朋友做了一个分享技术的交流群共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源没人解答问题坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化性能安全测试开发等等方面有一定建树的技术大牛
分享他们的经验还会分享很多直播讲座和技术沙龙
可以免费学习划重点开源的
qq群号110685036 4. 使用 pywinauto 上传文件
pywinauto 是Windows系统下的一个自动化工具,它可以直接获取到Windows系统下面的弹框,因此当文件上传的窗口出现之后我们可以使用这个工具传入文件的路径,然后点击打开按钮。
from pywinauto import Desktopapp Desktop()
dialog app[打开] # 根据名字找到弹出窗口
dialog[Edit].type_keys(/path/of/file.md) # 在输入框中输入值
dialog[Button].click()另一种系统自动化工具叫做 pyautogui。这个工具最大的特点在于使用坐标系统定位元素可以轻而易举的做到跨平台。不管你是Windowsmac还是Linux都可以使用这款工具实现自动化。
但是这款工具目前不支持中文的输入因此我们需要借助剪切板来实现中输入。首先我们把对应的中文复制到剪切板当中然后再通过 ctrl v 热键粘贴到文件路径输入框当中。
5. pyautogui import pyperclippyperclip.copy(D:\\\\用户.html)pyautogui.hotkey(ctrl, v)pyautogui.press(enter, presses2)键盘
keyboard.write(C:\\\\Users\\\\muji\\\\Desktop\\\\avatar.png)
time.sleep(1)
keyboard.press(enter)注意百度以图搜图禁用了爬虫所以在上传文件时会提示「图片上传失败请重新上传」。
6. 并发问题
通过系统窗口上传文件简单粗暴但是当你的程序需要并发执行时使用这种方式实现文件上传就比较麻烦了。如果你的程序需要并发执行最好还是通过控制input元素使用 send_keys 方法实现文件上传。 今天的分享就到此结束了 如果文章对你有帮助记得点赞收藏加关注。会不定期分享一些干货哦......