说明:
文件上传是web页面上很常见的一个功能,用脚本去实现文件上传很简单。
一般场景:在页面中的上传按钮是一个<input>标签,其中type属性为type="file",这种可以用selenium提供的send_keys()方法轻松解决。
示例:
页面代码片段:
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
</head>
<body>
<fieldset>
<legend>文件上传</legend>
<form action="">
<input type="file" name="upfile" value="">
</form>
</fieldset>
</fieldset>
</body>
</html>
脚本代码:
"""
1.学习目标:
掌握文件上传功能操作
2.操作步骤
此上传方式适用大多数情况。
上传文件标签为input类型,并且type=file时可使用此方式上传。
使用send_keys(“需要上传的文件的路径")
3.需求
在页面中,实现文件上传
4.总结
4.1 在上传文件的时候,对文件类型,大小等做充分验证。
4.2 在执行上传文件脚本时,加一定的等待时间,sleep()。
4.3 大多数上传文件都是input类型并且type=file。
4.4 对于非input标签的上传文件功能,使用Sendkeys库来实现。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开注册A页面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
sleep(2)
# 4.上传文件
# 4.1 定位上传文件按钮
upfile = driver.find_element_by_name("upfile")
# 4.2 使用send_keys方法上传文件
upfile.send_keys(r"C:\Users\L\Desktop\测试上传文件.txt")
sleep(5)
# 5.关闭浏览器
driver.quit()
提示:
另外一种非<input>标签的上传文件按钮,实现起来比较困难,可以借助autoit工具或者SendKeys第三方库来实现。
上传过程一般要打开一个系统的window 窗口,从窗口选择本地文件添加。所以,一般会卡在如何操作本地window 窗口。
总结:
其实上传本地文件没我们想的那么复杂,只要定位上传按钮,通send_keys()方法添加本地文件路径就可以了。绝对路径和相对路径都可以,关键是上传的文件存在。
小练习:使用邮箱给其他人发送一封代附件的邮件。添加附件,就是上传文件。邮件正文的操作就是操作iframe元素。
使用selenium.webdriver实现下载文件功能,只需要配置一下浏览器的参数即可实现。
1、Firefox浏览器文件下载
步骤:
Profile:通过FirefoxProfile()方法创建一个Firefox自定义配置信息实例。Profile实例中。Profile实例存储到浏览器对象中。实例:
需求:下载Firefox浏览器驱动文件
"""
1.学习目标
了解使用火狐浏览器实现文件下载
2.操作步骤(语法)
2.1 创建Firefox浏览器配置信息对象
webdriver.FirefoxProfile()
2.2 设置Firefox浏览器下载相关的自定义配置信息
2.3 创建Firefox浏览器对象,并把自定义配置信息存储到浏览器对象中
2.4 访问下载网站
2.5 进行下载
3.需求
使用火狐浏览器实现文件下载
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.创建Firefox浏览器配置信息对象,用于存放自定义配置
profile = webdriver.FirefoxProfile()
# 3. 配置profile下载相关信息
"""
3.1 指定自定义下载路径,默认只会自动创建一级目录,
如果指定了多级不存在的目录,将会下载到默认路径,
如下就是定义了多级不存在的目录,文件就下载到了火狐浏览器的默认下载目录中
我的火狐默认下载路径:C:\\Users\\L\\Downloads
"""
profile.set_preference('browser.download.dir', 'f:\\Download\\123\\456')
"""
3.2 将browser.download.folderList设置为:
设置成 0 表示下载到桌面
设置成 1 表示下载到浏览器默认下载路径
设置成 2 表示使用自定义下载路径
和上面browser.download.dir配合使用,如果设置成0和1
上面的配置基本无用。
"""
profile.set_preference('browser.download.folderList', 2)
"""
3.3 browser.helperApps.alwaysAsk.force:
对于未知的 MIME 类型文件会弹出窗口让用户处理,
默认值为true,设定为False,
表示不会记录打开未知 MIME 类型文件的方式
"""
profile.set_preference("browser.helperApps.alwaysAsk.force", False)
"""
3.4 在开始下载时是否显示下载管理器
设定为true,则在用户启动下载的时候显示Firefox浏览器的文件下载窗口
否则不显示文件下载窗口。
"""
profile.set_preference('browser.download.manager.showWhenStarting', False)
"""
3.5 设定为 False 会把下载框进行隐藏
"""
profile.set_preference("browser.download.manager.useWindow", False)
"""
3.6 默认值为 true,设定为 False 表示不获取焦点
"""
profile.set_preference("browser.download.manager. focusWhenStarting", False)
"""
3.7 下载.exe文件弹出警告,
默认值是 true,设定为False 则不会弹出警告框
"""
profile.set_preference("browser.download.manager.alertOnEXEOpen", False)
"""
3.8 browser.helperApps.neverAsk.openFile:
表示直接打开下载文件,不显示确认框
默认值为空字符串,下行代码行设定了多种文件的 MIME类型.
例如:
application/exe,表示.exe类型的文件,
application/excel表示 Excel 类型的文件
"""
profile.set_preference("browser.helperApps.neverAsk.openFile", "application/zip")
"""
3.9 对所给出文件类型不再弹出框进行询问,直接保存到本地磁盘
"""
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip, application/octet-stream')
"""
其他可选文件类型:
application/a-gzip
application/x-gzip,
application/zip,
application/x-gtar,
text/plain,
application/x-compressed,
application/octet-stream,
application/pdf
"""
"""
3.10 browser.download.manager.showAlertOnComplete:
设定下载文件结束后是否显示下载完成提示框,
默认为true,设定为False,
表示下载完成后不显示下载完成提示框
"""
profile.set_preference("browser.download.manager. showAlertOnComplete", False)
"""
3.11 browser.download.manager.closeWhenDone:
设定下载结束后是否自动关闭下载框,
默认值为true,设定为False,
表示不关闭下载管理器.
"""
profile.set_preference("browser.download.manager.closeWhenDone", False)
# 4. 创建浏览器对象
# 启动浏览器时,通过firefox_profile参数
# 将自动以配置添加到FirefoxProfile对象中
driver = webdriver.Firefox(firefox_profile=profile)
# 5. 访问Firefox浏览器驱动文件下载网址
driver.get("https://npm.taobao.org/mirrors/geckodriver/v0.20.0/")
sleep(3)
# 6. 定位下载链接,并点击下载
file = driver.find_element_by_link_text("geckodriver-v0.20.0-win64.zip")
file.click()
sleep(3)
# 7.关闭浏览器
driver.quit()
2、Chrome浏览器文件下载
示例:
Chrome浏览器,设置其options:
download.default_directory:设置下载路径。profile.default_content_settings.popups:设置为0禁止弹出窗口。"""
1.学习目标
了解使用谷歌浏览器实现文件下载
2.操作步骤(
2.1 创建谷歌浏览器加载项对象
webdriver.ChromeOptions()
2.2 定义Chrome浏览器加载项参数
2.3 将加载项参数添加到谷歌浏览器加载项对象中
options.add_experimental_option('prefs', prefs)
2.4 创建Chrome浏览器对象,并把自定义加载项对象存储到浏览器对象中
2.5 访问下载网站
2.6 进行下载
3.需求
使用谷歌浏览器实现文件下载
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2. 创建谷歌浏览器加载项对象
options = webdriver.ChromeOptions()
# 3. 定义加载项参数
prefs = {'profile.default_content_settings.popups': 0,
'download.default_directory': 'f:\\'}
# 4.将加载项参数添加到谷歌浏览器加载项对象中
options.add_experimental_option('prefs', prefs)
# 5. 创建浏览器对象,并添加加载项对象
driver = webdriver.Chrome(options=options)
# 6. 方位下载页面
driver.get('https://npm.taobao.org/mirrors/chromedriver/80.0.3987.106/')
# 7. 点击下载
driver.find_element_by_link_text("chromedriver_win32.zip").click()
sleep(3)
# 8.关闭浏览器
driver.quit()
说明:
chrome 其他常用启动参数
需要用的时候直接添加到配置信息中。
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"""
'profile.default_content_settings.popups': 0
是禁止弹出所有窗口
"""
2.是否提示安全警告
# 下载xml文件时,会弹出“此文件类型可能会损害您的计算机”的提示。
# 而不显示消息警告,需要添加下面配置,使用Selenium chromedriver禁用此弹出窗口。
"safebrowsing.enabled": True
最后我这里给你们分享一下我所积累和真理的文档和学习资料有需要是领取就可以了
这个大纲涵盖了目前市面上企业百分之99的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习

这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。






最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦

我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta