用C#+Selenium+ChromeDriver爬取網(wǎng)頁(模擬真實的用戶瀏覽行為)
以下文章來源于公眾號:DotNetCore實戰(zhàn)
1.背景
Selenium
是一個用于Web應(yīng)用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。而對于爬蟲來說,使用Selenium操控瀏覽器來爬取網(wǎng)上的數(shù)據(jù)那么肯定是爬蟲中的殺手武器。這里,我將介紹selenium + 谷歌瀏覽器的一般使用。
2.需求
在平常的爬蟲開發(fā)中,有時候網(wǎng)頁是一堆js堆起來的代碼,涉及很多異步計算,如果是普通的http 控制臺請求,那么得到的源文件是一堆js ,需要自己在去組裝數(shù)據(jù),很費力;但是采用Selenium
+ChromeDriver
可以達(dá)到所見即所得的完美效果。
3.實現(xiàn)方式
項目結(jié)構(gòu):為了方便使用,用的winform
程序,附nuget包
以下是form1.cs的代碼,這里就只放關(guān)鍵方法代碼了。需要安裝最新的chrome瀏覽器+代碼中使用的chromedriver
是 v2.9.248315
#region 異常 ?退出chromedriver ? ? ? ? [DllImport("user32.dll", EntryPoint = "FindWindow")] ? ? ? ? private extern static IntPtr FindWindow(string lpClassName, string lpWindowName); ? ? ? ? [DllImport("user32.dll", EntryPoint = "SendMessage")] ? ? ? ? public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); ? ? ? ? public const int SW_HIDE = 0; ? ? ? ? public const int SW_SHOW = 5; ? ? ? ? [DllImport("user32.dll", EntryPoint = "ShowWindow")] ? ? ? ? public static extern int ShowWindow(IntPtr hwnd, int nCmdShow); ? ? ? ? /// <summary> ? ? ? ? /// 獲取窗口句柄 ? ? ? ? /// </summary> ? ? ? ? /// <returns></returns> ? ? ? ? public IntPtr GetWindowHandle() ? ? ? ? { ? ? ? ? ? ? string name = (Environment.CurrentDirectory + "\\chromedriver.exe"); ? ? ? ? ? ? IntPtr hwd = FindWindow(null, name); ? ? ? ? ? ? return hwd; ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 關(guān)閉chromedriver窗口 ? ? ? ? /// </summary> ? ? ? ? public void CloseWindow() ? ? ? ? { ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? IntPtr hwd = GetWindowHandle(); ? ? ? ? ? ? ? ? SendMessage(hwd, 0x10, 0, 0); ? ? ? ? ? ? } ? ? ? ? ? ? catch { } ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 退出chromedriver ? ? ? ? /// </summary> ? ? ? ? /// <param name="driver"></param> ? ? ? ? public void CloseChromeDriver(IWebDriver driver) ? ? ? ? { ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? driver.Quit(); ? ? ? ? ? ? ? ? driver.Dispose(); ? ? ? ? ? ? } ? ? ? ? ? ? catch { } ? ? ? ? ? ? CloseWindow(); ? ? ? ? } ? ? ? ? #endregion 異常 ?退出chromedriver
效果:
說一下思路:
- 1.跳轉(zhuǎn)到指定的網(wǎng)頁
driver.Navigate().GoToUrl
- 2.確定數(shù)據(jù)源,從
driver.PageSource
讀取數(shù)據(jù) - 3.對html數(shù)據(jù)進(jìn)行解析
到此這篇關(guān)于用C#+Selenium+ChromeDriver爬取網(wǎng)頁(模擬真實的用戶瀏覽行為)的文章就介紹到這了,更多相關(guān)用C#+Selenium+ChromeDriver 爬取網(wǎng)頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WinForm實現(xiàn)狀態(tài)欄跑馬燈效果的方法示例
這篇文章主要介紹了WinForm實現(xiàn)狀態(tài)欄跑馬燈效果的方法,涉及WinForm控件結(jié)合時間函數(shù)動態(tài)操作元素屬性的相關(guān)技巧,需要的朋友可以參考下2017-07-07基于NPOI用C#開發(fā)的Excel以及表格設(shè)置
這篇文章主要為大家詳細(xì)介紹了基于NPOI用C#開發(fā)的Excel以及表格設(shè)置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Unity UGUI的HorizontalLayoutGroup水平布局組件介紹使用
這篇文章主要為大家介紹了Unity UGUI的HorizontalLayoutGroup水平布局組件介紹使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07