您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Python Selenium自動化爬蟲的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python Selenium自動化爬蟲的方法是什么”吧!
簡單介紹:
Selenium
是一個Web的自動化測試工具,最初是為網(wǎng)站自動化測試而開發(fā)的,Selenium 可以直接運行在瀏覽器上,它支持所有主流的瀏覽器(包括PhantomJS這些無界面的瀏覽器(2018年開發(fā)者說暫停開發(fā),chromedriver也可以實現(xiàn)同樣的功能)),可以接收指令,讓瀏覽器自動加載頁面,獲取需要的數(shù)據(jù),甚至頁面截屏。
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
這里用的谷歌瀏覽器
http://npm.taobao.org/mirrors/chromedriver/
查看自己的瀏覽器版本下載對應的驅(qū)動。
把解壓后的驅(qū)動放在自己的python.exe
目錄下。
http://npm.taobao.org/mirrors/chromedriver/
把解壓后的驅(qū)動放在自己的python.exe 目錄下
from selenium.webdriver import Chrome if __name__ == '__main__': web = Chrome() web.get("https://baidu.com") print(web.title)
from selenium.webdriver import Chrome if __name__ == '__main__': web = Chrome() url = 'https://ac.nowcoder.com/acm/home' web.get(url) # 獲取要點擊的a標簽 el = web.find_element_by_xpath('/html/body/div/div[3]/div[1]/div[1]/div[1]/div/a') # 點擊 el.click() # "/html/body/div/div[3]/div[1]/div[2]/div[2]/div[2]/div[1]/h5/a" # 爬取想要的內(nèi)容 lists = web.find_elements_by_xpath("/html/body/div/div[3]/div[1]/div[2]/div[@class='platform-item js-item ']/div[" "2]/div[1]/h5/a") print(len(lists)) for i in lists: print(i.text)
from selenium.webdriver import Chrome from selenium.webdriver.common.keys import Keys import time if __name__ == '__main__': web = Chrome() url = 'https://ac.nowcoder.com/acm/home' web.get(url) el = web.find_element_by_xpath('/html/body/div/div[3]/div[1]/div[1]/div[1]/div/a') el.click() time.sleep(1) input_el = web.find_element_by_xpath('/html/body/div/div[3]/div[1]/div[1]/div[1]/form/input[1]') input_el.send_keys('???#39;, Keys.ENTER) # do something
是否開啟無頭模式(即是否需要界面)
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options option = Options() # 實例化option對象 option.add_argument("--headless") # 給option對象添加無頭參數(shù) if __name__ == '__main__': web = Chrome(executable_path='D:\PyProject\spider\venv\Scripts\chromedriver.exe',options=option) # 指定驅(qū)動位置,否則從python解釋器目錄下查找. web.get("https://baidu.com") print(web.title)
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options option = Options() # 實例化option對象 option.add_argument("--headless") # 給option對象添加無頭參數(shù) if __name__ == '__main__': web = Chrome() web.maximize_window() # 瀏覽器窗口最大化 web.get("https://baidu.com") print(web.title) web.save_screenshot('baidu.png') # 保存當前網(wǎng)頁的截圖 保存到當前文件夾下 web.close() # 關(guān)閉當前網(wǎng)頁
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options option = Options() # 實例化option對象 option.add_argument("--headless") # 給option對象添加無頭參數(shù) if __name__ == '__main__': web = Chrome() web.maximize_window() # 瀏覽器窗口最大化 web.get("https://baidu.com") el = web.find_element_by_id('kw') el.send_keys('Harris-H') btn = web.find_element_by_id('su') btn.click() # web.close() # 關(guān)閉當前網(wǎng)頁
貌似現(xiàn)在百度可以識別出selenium
,還需要圖片驗證。
# 找到文本值為百度一下的節(jié)點 driver.find_element_by_link_text("百度一下") # 根據(jù)鏈接包含的文本獲取元素列表,模糊匹配 driver.find_elements_by_partial_link_text("度一下")
ele.text # 獲取當前節(jié)點的文本 ele.get_attribute("data-click") # 獲取到屬性對應的value
print(driver.page_source) # 打印網(wǎng)頁的源碼 print(driver.get_cookies()) # 打印出網(wǎng)頁的cookie print(driver.current_url) # 打印出當前網(wǎng)頁的url
driver.close() # 關(guān)閉當前網(wǎng)頁 driver.quit() # 直接關(guān)閉瀏覽器
from selenium.webdriver import Chrome import time if __name__ == '__main__': driver = Chrome() driver.get( "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=78000241_12_hao_pg&wd=selenium%20js%E6%BB%91%E5%8A%A8&fenlei=256&rsv_pq=8215ec3a00127601&rsv_t=a763fm%2F7SHtPeSVYKeWnxKwKBisdp%2FBe8pVsIapxTsrlUnas7%2F7Hoo6FnDp6WsslfyiRc3iKxP2s&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=31&rsv_sug1=17&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=9266&rsv_sug4=9770") # 1.滾動到網(wǎng)頁底部 js = "document.documentElement.scrollTop=1000" # 執(zhí)行js driver.execute_script(js) time.sleep(2) # 滾動到頂部 js = "document.documentElement.scrollTop=0" driver.execute_script(js) # 執(zhí)行js time.sleep(2) driver.close()
options = webdriver.ChromeOptions() options.add_argument("--proxy-server=http://110.52.235.176:9999") # 添加代理 options.add_argument("--headless") # 無頭模式 options.add_argument("--lang=en-US") # 網(wǎng)頁顯示英語 prefs = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2} # 禁止渲染 options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(executable_path="D:\ProgramApp\chromedriver\chromedriver73.exe",chrome_options=options) driver.get("http://httpbin.org/ip")
目標:滑動驗證碼
1.定位按鈕
2.按住滑塊
3.滑動按鈕
import time from selenium import webdriver if __name__ == '__main__': chrome_obj = webdriver.Chrome() chrome_obj.get('https://www.helloweba.net/demo/2017/unlock/') # 1.定位滑動按鈕 click_obj = chrome_obj.find_element_by_xpath('//div[@class="bar1 bar"]/div[@class="slide-to-unlock-handle"]') # 2.按住 # 創(chuàng)建一個動作鏈對象,參數(shù)就是瀏覽器對象 action_obj = webdriver.ActionChains(chrome_obj) # 點擊并且按住,參數(shù)就是定位的按鈕 action_obj.click_and_hold(click_obj) # 得到它的寬高 size_ = click_obj.size width_ = 298 - size_['width'] # 滑框的寬度 減去 滑塊的 寬度 就是 向x軸移動的距離(向右) print(width_) # 3.定位滑動坐標 action_obj.move_by_offset(298-width_, 0).perform() # 4.松開滑動 action_obj.release() time.sleep(6) chrome_obj.quit()
有時候窗口中有很多子tab頁面。這時候肯定是需要進行切換的。selenium提供了一個叫做switch_to_window來進行切換,具體切換到哪個頁面,可以從driver.window_handles
中找到
from selenium import webdriver if __name__ == '__main__': driver = webdriver.Chrome() driver.get("https://www.baidu.com/") driver.implicitly_wait(2) driver.execute_script("window.open('https://www.douban.com/')") driver.switch_to.window(driver.window_handles[1]) print(driver.page_source)
# 1.獲取所有的cookie: for cookie in driver.get_cookies(): print(cookie) # 2.根據(jù)cookie的key獲取value: value = driver.get_cookie(key) # 3.刪除所有的cookie: driver.delete_all_cookies() # 4.刪除某個cookie: driver.delete_cookie(key) # 添加cookie: driver.add_cookie({"name":"password","value":"111111"})
這里模擬登錄我們學校教務處:
from selenium.webdriver import Chrome if __name__ == '__main__': web = Chrome() web.get('http://bkjx.wust.edu.cn/') username = web.find_element_by_id('userAccount') username.send_keys('xxxxxxx') # 這里填自己的學號 password = web.find_element_by_id('userPassword') password.send_keys('xxxxxxx') # 這里填自己的密碼 btn = web.find_element_by_xpath('//*[@id="ul1"]/li[4]/button') btn.click() # do something
因為沒有滑塊啥的驗證,所以就很簡單qwq。然后后面進行自己的操作即可。
selenium能夠執(zhí)行頁面上的js,對于js渲染的數(shù)據(jù)和模擬登陸處理起來非常容易。
selenium由于在獲取頁面的過程中會發(fā)送很多請求,所以效率非常低,所以在很多時候需要酌情使用。
到此,相信大家對“Python Selenium自動化爬蟲的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。