c#爬虫-使用ChromeDriver 所见即所得
生活随笔
收集整理的這篇文章主要介紹了
c#爬虫-使用ChromeDriver 所见即所得
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問題
最近在做爬蟲的時(shí)候發(fā)現(xiàn)很多網(wǎng)頁都是瀏覽器看得見,但是源文件是看不到的,也就是所謂的異步加載。這時(shí)候如果我們需要那些異步內(nèi)容,要么是了解他的規(guī)則,進(jìn)行條件的組合進(jìn)而再次進(jìn)行http請(qǐng)求,得到數(shù)據(jù);這種方式有時(shí)候遇到邏輯復(fù)雜的就比較不好處理。這時(shí)候ChromeDriver就派上用場(chǎng)了。
辦法
下面我們來看下這個(gè)例子
爬取騰訊視頻,獲取電視劇或電影鏈接。
瀏覽器是這樣的查看文件是這樣的,壓根沒有視頻地址
使用ChromeOptions模擬用戶行為
???ChromeOptions?options?=?new?ChromeOptions();options.AddArguments("--test-type",?"--ignore-certificate-errors");options.AddArguments("user-agent=mozilla/5.0?(linux;?u;?android?2.3.3;?en-us;?sdk?build/?gri34)?applewebkit/533.1?(khtml,?like?gecko)?version/4.0?mobile?safari/533.1");options.AddArgument("enable-automation");//???options.AddArgument("headless");//??options.AddArguments("--proxy-server=http://user:password@yourProxyServer.com:8080");//??IWebDriver?driver?=?new?ChromeDriver(System.Environment.CurrentDirectory,?options);//chromeDriverService??System.Environment.CurrentDirectory???System.Environment.CurrentDirectoryusing?(IWebDriver?driver?=?new?OpenQA.Selenium.Chrome.ChromeDriver(@"C:\Users\Administrator\Downloads\chromedriver_win32",?options,?TimeSpan.FromSeconds(120))){//?trylogin(driver);driver.Url?=?"http://v.qq.com/iframe/player.html?tiny=1&auto=0&vid=z0023uikqoj";//tenvideo_video_player_0SetText(driver.PageSource);Thread.Sleep(200);try{for?(int?a?=?1;?a?<?2;?a++){SetText("\r\n第"?+?a.ToString()?+?"個(gè)");driver.Navigate().GoToUrl("https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageType=oss&imageAddress=cbuimgsearch/eWXC7XHHPN1607529600000&spm=");//登錄if?(driver.Url.Contains("login.1688.com")){SetText("\r\n需要登錄,開始嘗試...");trylogin(driver);?//嘗試登錄完成//再試試driver.Navigate().GoToUrl("https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageType=oss&imageAddress=cbuimgsearch/eWXC7XHHPN1607529600000&spm=");if?(driver.Url.Contains("login.1688.com")){//沒辦法退出SetText("\r\n退出,換ip重試...");return;}}//鼠標(biāo)放上去的內(nèi)容因?yàn)轫撁孀詭е荒茱@示一個(gè)的原因?沒辦法做到全部顯示?然后在下載?只能是其他方式下載//??var?elements?=?document.getElementsByClassName('hover-container');//??Array.prototype.forEach.call(elements,?function(element)?{//??element.style.display?=?"block";//???console.log(element);//??});IJavaScriptExecutor?js?=?(IJavaScriptExecutor)driver;var?sss?=?js.ExecuteScript("?var?elements?=?document.getElementsByClassName('hover-container');??Array.prototype.forEach.call(elements,?function(element)?{??console.log(element);?element.setAttribute(\"class\",?\"測(cè)試title\");??element.style.display?=?\"block\";??console.log(element);?});");Thread.Sleep(500);var?responseModel?=?Write(driver.PageSource,?Pagetypeenum.列表);Thread.Sleep(500);int?i?=?1;foreach?(var?offer?in?responseModel?.data?.offerList????new?List<OfferItemModel>()){driver.Navigate().GoToUrl(offer.information.detailUrl);string?responseDatadetail?=?driver.PageSource;Write(driver.PageSource,?Pagetypeenum.詳情);SetText("\r\n第"?+?a.ToString()?+?"-"?+?i.ToString()?+?"個(gè)");Thread.Sleep(500);i++;}}}catch?(Exception?ex){CloseChromeDriver(driver);throw;}}//?Thread?thread?=?new?Thread(go);//??thread.Start();}得到網(wǎng)頁信息SetText(driver.PageSource);
???private?void?button2_Click(object?sender,?EventArgs?e){//文件路徑string?filePath?=?@"G:\conan\reptiles1688\bin\Debug\test.txt";using?(FileStream?fsRead?=?new?FileStream(filePath,?FileMode.Open,?FileAccess.Read,?FileShare.ReadWrite)){int?fsLen?=?(int)fsRead.Length;byte[]?heByte?=?new?byte[fsLen];fsRead.Read(heByte,?0,?heByte.Length);string?myStr?=?System.Text.Encoding.Default.GetString(heByte);this.textBox1.Text?=?myStr;///讀取}HtmlAgilityPack.HtmlDocument?doc?=?new?HtmlAgilityPack.HtmlDocument();doc.LoadHtml(this.textBox1.Text);HtmlNode?node?=?doc.GetElementbyId("tenvideo_video_player_0");textBox1.Text?=?node.Attributes["src"].Value;//??var?node?=?doc.DocumentNode.SelectNodes("//video[@id='tenvideo_video_player_0']//video");//?textBox1.Text?=?(node[3].InnerHtml);}}解析得到我們想到的視頻地址。
總結(jié)
以上是生活随笔為你收集整理的c#爬虫-使用ChromeDriver 所见即所得的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WeihanLi.Npoi 1.18.0
- 下一篇: WPF 读取Docx文件并显示(附下载链