一、selenium概念
用來完成瀏覽器自動化的相關操作
使用程序編寫一系列的鍵盤、鼠標的相關操作(讓瀏覽器來完成), 當我們執行代碼時,就會觸發一系列的事件
二、selenium在爬蟲中的作用
可以獲取動態加載的數據
三、selenium安裝
pip install selenium
下載瀏覽器驅動程序: http://chromedriver.storage.googleapis.com/index.html (找到最接近的版本)
四、selenium使用
導包: from selenium import webdriver
實例化某一款瀏覽器的驅動,獲取一個對象
使用對象中的相關方法制定一系列的事件(鍵盤、鼠標的相關操作)
五、自動訪問百度
from selenium import webdriver bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get("https://www.baidu.com") bro.close()
六、自動百度搜索劉德華案例
import time from selenium import webdriver bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get("https://www.baidu.com") # 1. 定位到輸入框 kw = bro.find_element_by_id("kw") # 2. 鍵入劉德華關鍵字 kw.send_keys("劉德華") time.sleep(5) # 3. 定位到"百度一下"按鈕 input_key = bro.find_element_by_id("su") # 4. 觸發點擊事件 input_key.click() time.sleep(5) bro.close()
七、爬取雪球網
from selenium import webdriver bro = webdriver.Chrome('./chromedriver.exe') bro.get('https://xueqiu.com') # 獲取動態加載的數據 print(bro.page_source) bro.quit()
八、爬取雪球網的更多數據
import time from selenium import webdriver bro = webdriver.Chrome('./chromedriver.exe') bro.get('https://xueqiu.com') js = "window.scrollTo(0, document.body.scrollHeight)" # 表示滾輪往下拖動一屏的高度 bro.execute_script(js) time.sleep(2) bro.execute_script(js) time.sleep(2) bro.execute_script(js) time.sleep(2) bro.execute_script(js) time.sleep(2) # 獲取動態加載的數據 print(bro.page_source) bro.quit()
九、phantomJS
# phantomJS import time from selenium import webdriver bro = webdriver.PhantomJS('./phantomjs.exe') bro.get("https://www.baidu.com") # 截圖 bro.save_screenshot('11.jpg') # 1. 定位到輸入框 kw = bro.find_element_by_id("kw") # 2. 鍵入劉德華關鍵字 kw.send_keys("劉德華") time.sleep(2) # 3. 定位到"百度一下"按鈕 input_key = bro.find_element_by_id("su") # 4. 觸發點擊事件 input_key.click() # 截圖 bro.save_screenshot('21.jpg') time.sleep(2) bro.close()
十、前進和后退
# 前進和后退 import time from selenium import webdriver bro = webdriver.Chrome(executable_path='./chromedriver.exe') # 注意: bro對象只有將頁面完全加載完成之后,才會進行下一步的事件觸發 bro.get("https://www.baidu.com") bro.get("https://www.taobao.com") bro.get("https://www.jd.com") time.sleep(2) # 后退 bro.back() time.sleep(2) # 前進 bro.forward() time.sleep(2) bro.close()
十一、動作鏈(一)
# 動作鏈 import time from selenium import webdriver from selenium.webdriver import ActionChains bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable") # 定位到頁面中的iframe標簽內部,這樣才可以定位到它內部的標簽 bro.switch_to.frame("iframeResult") # 實例化一個動作鏈對象,將瀏覽器對象加載到這個動作鏈對象中 actions = ActionChains(bro) # 1. 定位“請拖拽我”標簽 source_tag = bro.find_element_by_id("draggable") # 2. 點擊“請拖拽我”, 並拖動 actions.click_and_hold(source_tag) for i in range(1, 6): actions.move_by_offset(50,0) time.sleep(1) actions.perform() # 執行所有動作鏈 time.sleep(2) bro.close()
十二、動作鏈(二)
# 動作鏈 import time from selenium import webdriver from selenium.webdriver import ActionChains bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable") # 定位到頁面中的iframe標簽內部,這樣才可以定位到它內部的標簽 bro.switch_to.frame("iframeResult") # 實例化一個動作鏈對象,將瀏覽器對象加載到這個動作鏈對象中 actions = ActionChains(bro) # 1. 定位“請拖拽我”標簽 source_tag = bro.find_element_by_id("draggable") target_tag = bro.find_element_by_id('droppable') # 點擊並拖動,並丟棄 actions.click_and_hold(source_tag) for i in range(1, 6): actions.move_by_offset(30,0) time.sleep(1) actions.drag_and_drop(source_tag, target_tag) actions.perform() # 執行所有動作鏈 bro.close()
十三、獲取cookie
# 獲取cookie from selenium import webdriver from selenium.webdriver import Chrome from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) browser = webdriver.Chrome('./chromedriver.exe', options=option) browser.get('https://www.baidu.com') print(browser.get_cookies()) # browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'}) # print(browser.get_cookies()) # browser.delete_all_cookies() # print(browser.get_cookies())