C# 爬虫使用Selenium webDriver下载pdf文件踩的坑

本文分享了在使用Selenium WebDriver进行PDF文件下载时遇到的问题及解决方案,包括避免使用Chrome浏览器,转而使用Firefox,并详细介绍了如何通过FirefoxOptions禁用PDF预览,设置下载路径,以及解决C# Console.ReadLine的长度限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段时间在做一个爬虫项目,所以用到了selenium webDriver这个包。
在这个过程中的真的也是踩了不少的坑。
目前来说说,自己觉得的坑吧!
首先,如果需要下载pdf文件的话,请不要使用chrome浏览器,因为其中的pdf查看器如何关闭,我找了一天都没找到。网上的基本都是关闭pdf的一个插件。可是近期版本的chrome好像已经取消了pdfviewer这个插件。chrome中跟pdf有关的,现在是一个pdfDocuments,在Chrome浏览器中输入chrome://settings/content/pdfDocuments,就可以进去了。
我能给你的提示只有这个了,如果成功解决了这个问题,请一定在评论中告诉我,谢谢。

接下来还是说说我后面是怎么搞定的吧!
其实也很简单,我既然搞不定chrome,那我就搞firefox.
这个就很简单了。

               FirefoxOptions options = new FirefoxOptions();
               options.SetPreference("pdfjs.disabled", true);//关闭pdf查看
               FirefoxDriver myDriver = new FirefoxDriver(options);

只要三句,就可以了。
但是在下载的时候,firefox还会弹出一个下载框。

 options.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");//禁止pdf文件下载提示
 //options.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");//禁止octet-stream文件下载提示

在中间加上这句,就可以了。
有的不行,就加上下面注释掉的那句试试。

然后项目要求能够打包出来,给用户直接运行,用户可以不用安装firefox就直接运行。
这个我用了一个笨的方法,就是把整个安装后的firefox文件,全部拿出来,按照firefox文件夹中的目录树,全部复制到了installer 安装中的application文件夹里面。
然后直接读取指定firefox的位置。

 options.BrowserExecutableLocation = System.IO.Directory.GetCurrentDirectory()+"\\Mozilla Firefox\\firefox.exe";//打包后设置浏览器路径

这个句的意思就是在你程序运行的位置,先找到Mozilla Firefox,然后在里面去找firefox.exe。
记住这句话,可得加在options 和driver中间哟。

还有就是记住C#的Console.ReadLine是有坑的。

如果你发现自己读取一个很长的网址,无法读取成功的话。可能就是这个ReadLine的坑。它的最长长度只有250个字节。

Stream steam = Console.OpenStandardInput();
Console.SetIn(new StreamReader(steam, Encoding.Default, false, 5000));

可以通过上面两句代码,来提高Console.ReadLine的读入长度。

还有就是如果你是使用XPath读取元素,发现元素读取时灵时不灵,还会出现明明能够交互的元素。却在点击时报错的话。可以换成CssSelector。

var downloadBtn = myDriver.FindElement(By.CssSelector("#screen-reader-main-content > div > div.buttons.text-s.pull-left.pad-left > div.PdfDownloadButton"));
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值