溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python Selenium自動化爬蟲的方法是什么

發(fā)布時間:2022-01-21 15:18:42 來源:億速云 閱讀:152 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Python Selenium自動化爬蟲的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python Selenium自動化爬蟲的方法是什么”吧!

    簡單介紹:

    Selenium是一個Web的自動化測試工具,最初是為網(wǎng)站自動化測試而開發(fā)的,Selenium 可以直接運行在瀏覽器上,它支持所有主流的瀏覽器(包括PhantomJS這些無界面的瀏覽器(2018年開發(fā)者說暫停開發(fā),chromedriver也可以實現(xiàn)同樣的功能)),可以接收指令,讓瀏覽器自動加載頁面,獲取需要的數(shù)據(jù),甚至頁面截屏。

    1.安裝

    pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

    2.下載瀏覽器驅(qū)動

    這里用的谷歌瀏覽器

    http://npm.taobao.org/mirrors/chromedriver/

    查看自己的瀏覽器版本下載對應的驅(qū)動。

    Python Selenium自動化爬蟲的方法是什么

    把解壓后的驅(qū)動放在自己的python.exe 目錄下。

    3.實例

    3.1下載對應版本的瀏覽器驅(qū)動

    http://npm.taobao.org/mirrors/chromedriver/

    Python Selenium自動化爬蟲的方法是什么

    Python Selenium自動化爬蟲的方法是什么

    把解壓后的驅(qū)動放在自己的python.exe 目錄下

    Python Selenium自動化爬蟲的方法是什么

    3.2測試code,打開一個網(wǎng)頁,并獲取網(wǎng)頁的標題

    from selenium.webdriver import Chrome
    
    
    if __name__ == '__main__':
        web = Chrome()
        web.get("https://baidu.com")
        print(web.title)

    Python Selenium自動化爬蟲的方法是什么

    Python Selenium自動化爬蟲的方法是什么

    3.3一個小樣例

    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)

    3.4自動輸入并跳轉(zhuǎn)

    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

    4.開啟無頭模式

    是否開啟無頭模式(即是否需要界面)

    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)

    5.保存頁面截圖

    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)頁

    6.模擬輸入和點擊

    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,還需要圖片驗證。

    6.1根據(jù)文本值查找節(jié)點

    # 找到文本值為百度一下的節(jié)點
    driver.find_element_by_link_text("百度一下") 
    # 根據(jù)鏈接包含的文本獲取元素列表,模糊匹配
    driver.find_elements_by_partial_link_text("度一下")

    6.2獲取當前節(jié)點的文本

    ele.text # 獲取當前節(jié)點的文本
    ele.get_attribute("data-click")  # 獲取到屬性對應的value

    6.3打印當前網(wǎng)頁的一些信息

    print(driver.page_source)  # 打印網(wǎng)頁的源碼
    print(driver.get_cookies())  # 打印出網(wǎng)頁的cookie
    print(driver.current_url)  # 打印出當前網(wǎng)頁的url

    6.4關(guān)閉瀏覽器driver.close()  # 關(guān)閉當前網(wǎng)頁

    driver.close()  # 關(guān)閉當前網(wǎng)頁
    driver.quit()  # 直接關(guān)閉瀏覽器

    6.5模擬鼠標滾動

    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()

    7.ChromeOptions

    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")

    8.驗證滑塊移動

    目標:滑動驗證碼

    • 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()

    9.打開多窗口和頁面切換

    有時候窗口中有很多子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)

    10.Cookie操作

    # 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"})

    11.模擬登錄

    這里模擬登錄我們學校教務處:

    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。然后后面進行自己的操作即可。

    12.優(yōu)缺點

    selenium能夠執(zhí)行頁面上的js,對于js渲染的數(shù)據(jù)和模擬登陸處理起來非常容易。
    selenium由于在獲取頁面的過程中會發(fā)送很多請求,所以效率非常低,所以在很多時候需要酌情使用。

    到此,相信大家對“Python Selenium自動化爬蟲的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

    向AI問一下細節(jié)

    免責聲明:本站發(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)容。

    AI