这段时间在做一个爬虫项目,所以用到了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"));