python實現selenium網絡爬蟲的方法小結
selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為瞭解決requests無法直接執行JavaScript代碼的問題,selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之後的結果,可支持多種瀏覽器,這裡隻用到谷歌瀏覽器。
1.selenium初始化
方法一:會打開網頁
# 該方法會打開goole網頁 from selenium import webdriver url = '網址' driver = webdriver.Chrome() driver.get(url) driver.maximize_window() # 實現窗口最大化
方法二:不會打開網頁
# 該方法會隱式打開goole網頁 from selenium import webdriver url = '網址' driver = webdriver.ChromeOptions() driver.add_argument("headless") driver = webdriver.Chrome(options=driver) driver.get(url)
driver = webdriver.Chrome()出錯是因為沒有chromedriver.exe這個文件
2.元素定位
在selenium中,可以有多種方法對元素進行定位,個人通常喜歡用Xpath和selector來定位元素,這樣就不用一個一個的去找節點,直接在網頁上定位到元素復制就行。
driver.find_element_by_id() # 通過元素ID定位 driver.find_element_by_name() # 通過元素Name定位 driver.find_element_by_class_name() # 通過類名定位 driver.find_element_by_tag_name() # 通過元素TagName定位 driver.find_element_by_link_text() # 通過文本內容定位 driver.find_element_by_partial_link_text() driver.find_element_by_xpath() # 通過Xpath語法定位 driver.find_element_by_css_selector() # 通過選擇器定位
註:若尋找多個元素,要記得用復數來選擇(element改為elements)
# 例如 [i.text for i in driver.find_elements_by_xpath()]
3.建立點擊事件
因為有些網站的需求,需建立點擊事件,
如下圖的這種時間選擇,需要設置點擊和輸入內容,設置的方法也很簡單。
driver.find_element_by_css_selector('').click() # 點擊 driver.find_element_by_css_selector('').send_keys('2021-3-9') # 輸入內容
4.切換窗口
有些網站點擊之後會產生新窗口,這時就需要進行窗口的切換才能進行元素定位
win = driver.window_handles # 獲取當前瀏覽器的所有窗口 driver.switch_to.window(win[-1]) # 切換到最後打開的窗口 driver.close() # 關閉當前窗口 driver.switch_to.window(win[0]) # 切換到最初的窗口
5.iframe問題
有些網站會采用iframe來編寫頁面,這時就需要進入到iframe才可以獲取元素,一般有多少個iframe就需要進入多少個iframe。
# 有兩個iframe,需逐步進入 iframe1 = driver.find_element_by_xpath('') driver.switch_to.frame(iframe1) iframe2 = driver.find_element_by_xpath('') driver.switch_to.frame(iframe2)
到此這篇關於python實現selenium網絡爬蟲的文章就介紹到這瞭,更多相關python selenium網絡爬蟲內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 全網最全python庫selenium自動化使用詳細教程
- Python語言中的Selenium環境搭建
- python自動化測試selenium定位frame及iframe示例
- Python+Selenium定位不到元素常見原因及解決辦法(報:NoSuchElementException)
- selenium動態數據獲取的方法實現