20210207:
问题:个别文件不请自来,竟然自动下载到了我的工程代码路径下。
如何特定问题原因:
开始有些盲目,以为可以直接百度谷歌到真正的原因。还是太天真。
寻找问题原因,还是要debug。先浏览一边代码在自己认为可能出问题的加上断点,然后debug。
driver.get(request.url)
这句执行之后,文件就下载了。此时我还在考虑代码的问题。其实这个时候应该把问题转到浏览器上了。把url拷贝到浏览器上,果然开始自动下载了。
开始想如何禁止浏览器的自动下载。其实这个思路不对的。
接着转换了思路,虽然上面的思路错了,但是通过百度学习。我可以改变浏览器的默认下载路径。
通过下面参照,路径是改变了。但是问题只解决了一半,文件不会download到我的工程路径下,但是它们还是下载了。而且路径不能动态改变。
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> chromePrefs = new HashMap<>();
chromePrefs.put("download.default_directory", "/pathToDownloadFolder");
chromePrefs.put("download.prompt_for_download", false);
chromePrefs.put("download.directory_upgrade", true);
chromePrefs.put("safebrowsing.enabled", true);
options.setExperimentalOption("prefs", chromePrefs);
// create chrome driver
webDriver = new ChromeDriver(options);
其实还是有一个问题,就是为什么会自动下载这些文件?留个课题,以后再来解决。
想了很多办法,想把这些不速之客全部删掉。但是都没有成功。
办法总会有的,只要不放弃寻找。
最后,利用linux的黑洞(black hole)-/dev/null。把默认下载路径指向这里。至此,暂时解决了问题。
参照:
https://blog.csdn.net/culinxia2707/article/details/108776762
如何在Chrome中启用或禁用多个文件下载
https://blog.csdn.net/zbj18314469395/article/details/81207268
使用Chrome浏览器自动下载文件并保存到指定的文件路径(使用Selenium更改Chrome默认下载存储路径)
http://cn.voidcc.com/question/p-ndswsouz-hh.html
如何在Webdriver中禁用文件下载ChromeProfile
https://mydown.yesky.com/news/87334201.html
在Google Chrome中设置禁止自行下载垃圾文件的具体方法
https://blog.csdn.net/loongshawn/article/details/50514018
Linux中的黑洞(black hole)-/dev/null
http://www.voidcn.com/article/p-rkqzdras-bwr.html
如何使用Selenium关闭Chrome的“下载”对话框(单击“取消”)
20210205
chrome的cache如何清除?
万万没想到。这隐藏的硬盘空间杀手。
必须要把失去的空间夺回来。
尝试了很多办法,都没有解决问题。
通过改变浏览器驱动的options是无法解决问题。缓存文件依然存在。重复执行还在累加。
是时候改变思路,通过python执行脚本删除这些缓存文件。
应该加在什么位置,爬虫的关闭的时候,应该按照一定的条件搜索缓存文件,删除。
这里会用到linux的find的命令,删除的时候不能影响到正在可能正在运行的爬虫进程。所以,需要按照文件创建时间来搜索文件并删除。
除了用python调用shell,也可以用cron定时任务来执行该脚本。
常用命令备忘:
查看磁盘隐藏文件
ls -a
查看磁盘的空间
sudo du -sh .
删除缓存文件
sudo rm -rf .com.google.Chrome.*
find /tmp/.com.google.Chrome.* -mmin +180 |xargs rm -rf
find /tmp/.com.google.Chrome.* -mmin +180 -exec rm -rf {} \;
参照:
https://blog.csdn.net/baidu_34036884/article/details/79419608
chrome浏览器开发者模式禁用缓存的设置方法
https://www.cnblogs.com/general-practitioner/p/12116926.html
chrome启动参数
https://blog.csdn.net/xc_zhou/article/details/82415870
chrome浏览器的options参数
https://blog.csdn.net/wm9028/article/details/107536929
Python selenium-chrome禁用打印日志输出
https://www.v2ex.com/t/660644
Selenium Chrome driver 该如何清除缓存然后刷新页面?
https://blog.csdn.net/zwq912318834/article/details/79215400
python + selenium + chrome 如何清理浏览器缓存
https://www.cnblogs.com/peng-lan/p/9604636.html
Selenium学习(8) Cookie处理
https://www.cnblogs.com/Ido-911/p/9638612.html
Linux中find命令用法大全
https://www.jianshu.com/p/ea8cc2248022
Linux find 命令详解
https://www.cnblogs.com/chenwz/p/10456826.html
[Linux]-find查找符合条件的文件并且删除
20210222
调查为什么会有[GET http://localhost:51615/shutdown]请求?
第一次没有再现。
对比环境。发现环境和客户的不一致。
在自己的环境中安装squid代理。
yum install -y squid
编辑配置文件
vim /etc/squid/squid.conf
添加允许本地访问,注意位置在deny all之前
http_access allow local
启动服务
squid -z
systemctl start squid
查看服务状态
service squid status
实时监控
sudo tail -f /var/log/squid/access.log
验证代理服务是否可用
curl --proxy http://localhost:3128 www.baidu.com
再次实行,再现。通过分析log发现这个现象和selenium有关。
找selenium的doc官网,然后検索shutdown关键字
https://www.selenium.dev/selenium/docs/api/py/_modules/selenium/webdriver/common/service.html#Service.send_remote_shutdown_command
原因就在这里。
但是不知道如何修改,来避免代码放送这样的请求。
临时的替代方案是更改环境变量。
export no_proxy='localhoist,127.0.0.1'
参照:
https://blog.csdn.net/a13568hki/article/details/103955331
https://www.cnblogs.com/riversouther/p/4717720.html
http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
https://www.selenium.dev/selenium/docs/api/py/_modules/selenium/webdriver/common/service.html#Service.send_remote_shutdown_command
https://www.it1352.com/1878338.html
https://testerhome.com/topics/19994