scrapy+selenium+chrome:问题笔记,持续更新。。。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值