国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學習站小程序
            隨時隨地免費學習課程

            當前位置:首頁  >  技術(shù)干貨  > selenium爬蟲登陸驗證碼的破解從這里開始

            selenium爬蟲登陸驗證碼的破解從這里開始

            來源:千鋒教育
            發(fā)布人:wjy
            時間: 2022-06-07 10:04:00 1654567440

              一、selenium簡介

              由于requests模塊是一個不完全模擬瀏覽器行為的模塊,只能爬取到網(wǎng)頁的HTML文檔信息,無法解析和執(zhí)行CSS、JavaScript代碼,因此需要我們做人為判斷;

              1、什么是selenium

              selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法執(zhí)行javaScript代碼的問題。

              selenium模塊本質(zhì)是通過驅(qū)動瀏覽器,完全模擬瀏覽器的操作,比如跳轉(zhuǎn)、輸入、點擊、下拉等,來拿到網(wǎng)頁渲染之后的結(jié)果,可支持多種瀏覽器;由于selenium解析執(zhí)行了CSS、JavaScript所以相對requests它的性能是低下的;

              2、selenium的用途

              (1)、selenium可以驅(qū)動瀏覽器自動執(zhí)行自定義好的邏輯代碼,也就是可以通過代碼完全模擬成人類使用瀏覽器自動訪問目標站點并操作,那我們也可以拿它來做爬蟲。

              (2)、selenium本質(zhì)上是通過驅(qū)動瀏覽器,完全模擬瀏覽器的操作,比如跳轉(zhuǎn)、輸入、點擊、下拉等...進而拿到網(wǎng)頁渲染之后的結(jié)果,可支持多種瀏覽器

              二、selenium的安裝與測試

              1、下載selenium模塊:

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

              或者在pycharm中下載

              2、安裝瀏覽器驅(qū)動

              (1) Google瀏覽器驅(qū)動(在下載驅(qū)動之前,查看一下chrome瀏覽器的版本號,如下:)

            selenium爬蟲登陸驗證碼的破解從這里開始633

             

              國內(nèi)鏡像網(wǎng)站地址:http://npm.taobao.org/mirrors/chromedrive

            selenium爬蟲登陸驗證碼的破解從這里開始688

             

              當然也可以去官網(wǎng)找最新的版本,官網(wǎng): https://sites.google.com/a/chromium.org/chromedriver/downloads

              另外注意:把下載好的chromedriver.exe放到python安裝路徑的scripts目錄中即可

              (2) firefox瀏覽器驅(qū)動:

              selenium3默認支持的webdriver是Firfox,而Firefox需要安裝geckodriver

              下載鏈接:https://github.com/mozilla/geckodriver/releases

              (3) 測試是否安裝成功

            from selenium import webdriver
            browser=webdriver.Chrome()
            #實例化1個谷歌瀏覽器對象
            browser.get('https://www.baidu.com/')  
            time.sleep(5)
            browser.close()

            selenium爬蟲登陸驗證碼的破解從這里開始1119

             

              三、selenium的使用

              所謂模擬瀏覽器基本就是下面的流程:

              請求

              顯示頁面

              查找元素

              點擊可點擊元素

              所以如何使用selenium找到頁面中的標簽,進而觸發(fā)標簽事件,就會變的尤為重要。

              ○ selenium選擇器

              要想定位頁面的元素,selenium也提供了一系列的方法。

              1.通過標簽id屬性進行定位

              browser.find_element_by_id('kw') # 其中kw便是頁面中某個元素的id值

              2.通過標簽name屬性進行定位

              # 兩種方式是一樣的

              browser.find_element_by_name("wd") # 其中wd是頁面中某個元素的name值

              3.通過標簽名進行定位

              browser.find_element_by_tag_name("img") # img參數(shù)表示的就是圖片標簽img

              4.通過CSS查找方式進行定位

              browser.find_elements_by_css_selector("#kw") # 根據(jù)選擇器進行定位查找,其中#kw表示的是id選擇器名稱是kw的

              5.通過xpath方式定位

              browser.find_element_by_xpath('//*[@id="kw"]') # 參數(shù)即是xpath的語法

              6.通過搜索 頁面中 鏈接進行定位

              有時候不是一個輸入框也不是一個按鈕,而是一個文字鏈接,我們可以通過link

              browser.find_element_by_link_text("設(shè)置")

              通過搜索 頁面中 鏈接進行定位 ,可以支持模糊匹配**

              browser.find_element_by_partial_link_text("百度") # 查找頁面所有的含有百度的文字鏈接

              ○ selenium顯示等待和隱式等待

              顯示等待:就是明確要等到某個元素的出現(xiàn)或者是某個元素的可點擊等條件,等不到,就一直等,除非在規(guī)定的時間之內(nèi)都沒找到,就會跳出異常Exception

              操作格式:WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

              WebDriverWait()一般由until()或 untilnot()方法配合使用

              until(method, message=' '):調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù),直到返回值為True

              `untilnot(method, message=' ')`:調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù),直到返回值為False

            返回值為False

            from selenium import webdriver
            from selenium.webdriver.support.ui import WebDriverWait
            from selenium.webdriver.support import expected_conditions as EC
            from selenium.webdriver.common.by import By

            driver = webdriver.chrome()
            driver.get('http://www.baidu.com')

            element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
            element.send_keys('selenium')

              隱式等待:就是在創(chuàng)建driver時,為瀏覽器對象創(chuàng)建一個等待時間,這個方法是得不到某個元素就等待一段時間,直到拿到某個元素位置。

              注意:在使用隱式等待的時候,實際上瀏覽器會在你自己設(shè)定的時間內(nèi)部斷的刷新頁面去尋找我們需要的元素

            driver.implicitly_wait() 默認設(shè)置為0

              例如: driver.implicitly_wait(10) 。如果元素在10s內(nèi)定位到了,繼續(xù)執(zhí)行。如果定位不到,將以循環(huán)方式判斷元素是否被定位到。如果在10s內(nèi)沒有定位到,則拋出異常

            from selenium import webdriver

            driver = webdriver.chrome()
            driver.get('http://www.baidu.com')
            # 隱式等待10
            driver.implicitly_wait(10)

              另外還有一種就是我們常用的sleep,我們稱為:強制等待。

              有時候我們希望腳本在執(zhí)行到某一位置時暫停一段時間等待頁面加載,這時可以使用sleep()方法。sleep()方法會固定休眠一定的時長,然后再繼續(xù)執(zhí)行。sleep()方法默認參數(shù)以秒為單位。

            from time import sleep
            from selenium import webdriver

            driver = webdriver.chrome()
            driver.get('http://www.baidu.com')
            # 強制休眠2
            sleep(2)
            driver.find_element_by_id("kw").send_keys("selenium")

              ○ 元素交互操作

              用selenium做自動化,有時候會遇到需要模擬鼠標操作才能進行的情況,比如單擊、雙擊、點擊鼠標右鍵、拖拽(滑動驗證)等等。而selenium給我們提供了一個類來處理這類事件——ActionChains;

              selenium.webdriver.common.action_chains.ActionChains(driver)

              這個類基本能夠滿足我們所有對鼠標操作的需求。

              actionChains的基本使用:

              首先需要了解ActionChains的執(zhí)行原理,當你調(diào)用ActionChains的方法時,不會立即執(zhí)行,而是會將所有的操作按順序存放在一個隊列里,當你調(diào)用perform()方法時,隊列中的時間會依次執(zhí)行。

              這種情況下我們可以有兩種調(diào)用方法:

              鏈式寫法

            menu = driver.find_element_by_css_selector(".div1")
            hidden_submenu =    driver.find_element_by_css_selector(".div1 #menu1")
            ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()

              分步寫法

            menu = driver.find_element_by_css_selector(".div1")
            hidden_submenu = driver.find_element_by_css_selector(".div1 #menu1")

            actions = ActionChains(driver)
            actions.move_to_element(menu)
            actions.click(hidden_submenu)
            actions.perform()

              兩種寫法本質(zhì)是一樣的,ActionChains都會按照順序執(zhí)行所有的操作。

              actionChains方法列表:

              click(on_element=None) ——單擊鼠標左鍵

              click_and_hold(on_element=None) ——點擊鼠標左鍵,不松開

              context_click(on_element=None) ——點擊鼠標右鍵

              double_click(on_element=None) ——雙擊鼠標左鍵

              drag_and_drop(source, target) ——拖拽到某個元素然后松開

              drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某個坐標然后松開

              key_down(value, element=None) ——按下某個鍵盤上的鍵

              key_up(value, element=None) ——松開某個鍵

              move_by_offset(xoffset, yoffset) ——鼠標從當前位置移動到某個坐標

              move_to_element(to_element) ——鼠標移動到某個元素

              move_to_element_with_offset(to_element, xoffset, yoffset) ——移動到距某個元素(左上角坐標)多少距離的位置

              perform() ——執(zhí)行鏈中的所有動作

              release(on_element=None) ——在某個元素位置松開鼠標左鍵

              send_keys(*keys_to_send) ——發(fā)送某個鍵到當前焦點的元素

              send_keys_to_element(element, *keys_to_send) ——發(fā)送某個鍵到指定元素

              示例代碼:

            from selenium import webdriver
            from selenium.webdriver.common.keys import Keys
            import time

            try:
                driver = webdriver.Chrome()
                driver.implicitly_wait(10)
                # 1、往jd發(fā)送請求
                driver.get('https://www.jd.com/')
                # 找到輸入框輸入圍城
                input_tag = driver.find_element_by_id('key')
                input_tag.send_keys('華為')
                # 鍵盤回車
                input_tag.send_keys(Keys.ENTER)
                time.sleep(2)
                # 找到輸入框輸入墨菲定
                input_tag = driver.find_element_by_id('key')
                input_tag.clear()
                input_tag.send_keys('樊登讀書')
                # 找到搜索按鈕點擊搜索
                button = driver.find_element_by_class_name('button')
                button.click()
                time.sleep(10)

            finally:
                driver.close()

            或者前進后退相關(guān)

            import time
            from selenium import webdriver

            browser = webdriver.Chrome()
            browser.get('https://www.cnblogs.com/xuanyuan/')

            browser.find_element_by_partial_link_text('我是如何把計算機網(wǎng)絡(luò)考了100分的?').click()

            time.sleep(3)
            browser.back()  # 后退
            time.sleep(3)
            browser.forward()  # 前進
            time.sleep(5)
            browser.close()

              四、綜合案例

            import os
            from selenium import webdriver
            from selenium.webdriver.common.by import By
            from selenium.webdriver.support import expected_conditions as EC  # available since 2.26.0
            from selenium.webdriver.support.ui import WebDriverWait  # available since 2.4.0
            from selenium.webdriver.support import expected_conditions

            import pandas as pd


            class MyCrawler(object):
                def __init__(self):
                    self.path = "./data"

                    if not os.path.exists(self.path):
                        os.mkdir(self.path)

                    self.driver = webdriver.Chrome()
                    self.base_url = "http://data.house.163.com/bj/housing/trend/district/todayprice/{date:s}/{interval:s}/allDistrict/1.html?districtname={disname:s}#stoppoint"
                    self.data = None

                def craw_page(self, date="2020.01.01-2020.12.30", interval="month", disname="全市"):
                    driver = self.driver
                    url = self.base_url.format(date=date, interval=interval, disname=disname)
                    driver.get(url)
                    try:
                   
                        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "resultdiv_1")))
                        self.data = pd.DataFrame()
                        ct = True
                        while ct:
                            self.get_items_in_page(driver)
                            e_pages = driver.find_elements_by_xpath(
                                '//div[@class="pager_box"]/a[@class="pager_b current"]/following::a[@class="pager_b "]')
                            if len(e_pages) > 0:
                                next_page_num = e_pages[0].text
                                e_pages[0].click()

                                # 通過判斷當前頁是否為我們點擊頁面的方式來等待頁面加載完成
                                WebDriverWait(driver, 10).until(
                                    expected_conditions.text_to_be_present_in_element(
                                        (By.XPATH, '//a[@class="pager_b current"]'),
                                        next_page_num
                                    )
                                )
                            else:
                                ct = False
                                brea
                        return self.data
                    finally:
                        driver.quit()
                        
                def get_items_in_page(self, driver):
                    e_tr = driver.find_elements_by_xpath("http://tr[normalize-space(@class)='mBg1' or normalize-space(@class)='mBg2']")
                    temp = pd.DataFrame(e_tr, columns=['web'])
                    temp['時間'] = temp.web.apply(lambda x: x.find_element_by_class_name('wd2').text.split(' ')[0])
                    temp['套數(shù)'] = temp.web.apply(lambda x: x.find_element_by_class_name('wd5').text)
                    temp['均價'] = temp.web.apply(lambda x: x.find_element_by_class_name('wd7').text)
                    temp['去化'] = temp.web.apply(lambda x: x.find_element_by_class_name('wd14').text)
                    del temp['web']

                    self.data = pd.concat([temp, self.data], axis=0)


            mcraw = MyCrawler()
            data = mcraw.craw_page()

            data= data.sort_values(by='時間')
            print(data.to_string(index=False))

            selenium爬蟲登陸驗證碼的破解從這里開始8502

             

            更多關(guān)于python培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務(wù)經(jīng)驗,采用全程面授高品質(zhì)、高體驗培養(yǎng)模式,擁有國內(nèi)一體化教學管理及學員服務(wù),助力更多學員實現(xiàn)高薪夢想。

            tags:
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
            請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
            免費領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學 138****2860 剛剛成功領(lǐng)取
            王同學 131****2015 剛剛成功領(lǐng)取
            張同學 133****4652 剛剛成功領(lǐng)取
            李同學 135****8607 剛剛成功領(lǐng)取
            楊同學 132****5667 剛剛成功領(lǐng)取
            岳同學 134****6652 剛剛成功領(lǐng)取
            梁同學 157****2950 剛剛成功領(lǐng)取
            劉同學 189****1015 剛剛成功領(lǐng)取
            張同學 155****4678 剛剛成功領(lǐng)取
            鄒同學 139****2907 剛剛成功領(lǐng)取
            董同學 138****2867 剛剛成功領(lǐng)取
            周同學 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            抖音小店照片要求尺寸多大

            在抖音平臺開設(shè)小店已經(jīng)成為了越來越多人的選擇,相信大家已經(jīng)在各大社交平臺上看到有不少小店的推廣。在抖音上,照片是展示產(chǎn)品的重要手段,因...詳情>>

            2023-10-08 16:14:25
            抖音招商團長托管服務(wù)費怎么退回來

            抖音招商團長托管服務(wù)是抖音為有意愿創(chuàng)作內(nèi)容并帶動其他創(chuàng)作者成為團隊成員的用戶提供的一種服務(wù)。通過該服務(wù),招商團長可以自主組建團隊并得到...詳情>>

            2023-10-08 16:08:53
            抖音小店怎么做代銷

            抖音已經(jīng)成為了一個非常受歡迎的短視頻應(yīng)用程序,在其中許多用戶都精心打造了自己的小店,用于銷售各種各樣的商品,獲取額外的收入。然而,要想...詳情>>

            2023-10-08 15:28:41
            怎樣開抖音小店帶貨賺錢

            隨著直播帶貨的火熱,越來越多的人開始嘗試通過抖音小店來開展帶貨業(yè)務(wù)。抖音小店是抖音直播帶貨的配套,可以讓用戶在購買直播中產(chǎn)品時就實現(xiàn)購...詳情>>

            2023-10-08 15:06:36
            能不能幫我打開抖音小店店鋪呢怎么弄

            抖音小店是近年來非?;鸨囊粋€網(wǎng)絡(luò)業(yè)務(wù),也是提供了很多商業(yè)機會的平臺。對于一個創(chuàng)業(yè)者而言,開設(shè)抖音小店是一個不錯的選擇。但是,許多小店...詳情>>

            2023-10-08 15:01:21