91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

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

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

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

      selenium爬蟲登陸驗(yàn)證碼的破解從這里開始

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

        一、selenium簡(jiǎn)介

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

        1、什么是selenium

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

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

        2、selenium的用途

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

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

        二、selenium的安裝與測(cè)試

        1、下載selenium模塊:

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

        或者在pycharm中下載

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

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

      selenium爬蟲登陸驗(yàn)證碼的破解從這里開始633

       

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

      selenium爬蟲登陸驗(yàn)證碼的破解從這里開始688

       

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

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

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

        selenium3默認(rèn)支持的webdriver是Firfox,而Firefox需要安裝geckodriver

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

        (3) 測(cè)試是否安裝成功

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

      selenium爬蟲登陸驗(yàn)證碼的破解從這里開始1119

       

        三、selenium的使用

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

        請(qǐng)求

        顯示頁(yè)面

        查找元素

        點(diǎn)擊可點(diǎn)擊元素

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

        ○ selenium選擇器

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

        1.通過(guò)標(biāo)簽id屬性進(jìn)行定位

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

        2.通過(guò)標(biāo)簽name屬性進(jìn)行定位

        # 兩種方式是一樣的

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

        3.通過(guò)標(biāo)簽名進(jìn)行定位

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

        4.通過(guò)CSS查找方式進(jìn)行定位

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

        5.通過(guò)xpath方式定位

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

        6.通過(guò)搜索 頁(yè)面中 鏈接進(jìn)行定位

        有時(shí)候不是一個(gè)輸入框也不是一個(gè)按鈕,而是一個(gè)文字鏈接,我們可以通過(guò)link

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

        通過(guò)搜索 頁(yè)面中 鏈接進(jìn)行定位 ,可以支持模糊匹配**

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

        ○ selenium顯示等待和隱式等待

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

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

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

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

        `untilnot(method, message=' ')`:調(diào)用該方法提供的驅(qū)動(dòng)程序作為一個(gè)參數(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時(shí),為瀏覽器對(duì)象創(chuàng)建一個(gè)等待時(shí)間,這個(gè)方法是得不到某個(gè)元素就等待一段時(shí)間,直到拿到某個(gè)元素位置。

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

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

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

      from selenium import webdriver

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

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

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

      from time import sleep
      from selenium import webdriver

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

        ○ 元素交互操作

        用selenium做自動(dòng)化,有時(shí)候會(huì)遇到需要模擬鼠標(biāo)操作才能進(jìn)行的情況,比如單擊、雙擊、點(diǎn)擊鼠標(biāo)右鍵、拖拽(滑動(dòng)驗(yàn)證)等等。而selenium給我們提供了一個(gè)類來(lái)處理這類事件——ActionChains;

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

        這個(gè)類基本能夠滿足我們所有對(duì)鼠標(biāo)操作的需求。

        actionChains的基本使用:

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

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

        鏈?zhǔn)綄懛?/p>

      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都會(huì)按照順序執(zhí)行所有的操作。

        actionChains方法列表:

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

        click_and_hold(on_element=None) ——點(diǎn)擊鼠標(biāo)左鍵,不松開

        context_click(on_element=None) ——點(diǎn)擊鼠標(biāo)右鍵

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

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

        drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某個(gè)坐標(biāo)然后松開

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

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

        move_by_offset(xoffset, yoffset) ——鼠標(biāo)從當(dāng)前位置移動(dòng)到某個(gè)坐標(biāo)

        move_to_element(to_element) ——鼠標(biāo)移動(dòng)到某個(gè)元素

        move_to_element_with_offset(to_element, xoffset, yoffset) ——移動(dòng)到距某個(gè)元素(左上角坐標(biāo))多少距離的位置

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

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

        send_keys(*keys_to_send) ——發(fā)送某個(gè)鍵到當(dāng)前焦點(diǎn)的元素

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

        示例代碼:

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

      try:
          driver = webdriver.Chrome()
          driver.implicitly_wait(10)
          # 1、往jd發(fā)送請(qǐng)求
          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('樊登讀書')
          # 找到搜索按鈕點(diǎn)擊搜索
          button = driver.find_element_by_class_name('button')
          button.click()
          time.sleep(10)

      finally:
          driver.close()

      或者前進(jìn)后退相關(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('我是如何把計(jì)算機(jī)網(wǎng)絡(luò)考了100分的?').click()

      time.sleep(3)
      browser.back()  # 后退
      time.sleep(3)
      browser.forward()  # 前進(jìn)
      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()

                          # 通過(guò)判斷當(dāng)前頁(yè)是否為我們點(diǎn)擊頁(yè)面的方式來(lái)等待頁(yè)面加載完成
                          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['時(shí)間'] = 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['均價(jià)'] = 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='時(shí)間')
      print(data.to_string(index=False))

      selenium爬蟲登陸驗(yàn)證碼的破解從這里開始8502

       

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

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

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

      2023-10-08 16:14:25
      抖音招商團(tuán)長(zhǎng)托管服務(wù)費(fèi)怎么退回來(lái)

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

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

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

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

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

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

      抖音小店是近年來(lái)非常火爆的一個(gè)網(wǎng)絡(luò)業(yè)務(wù),也是提供了很多商業(yè)機(jī)會(huì)的平臺(tái)。對(duì)于一個(gè)創(chuàng)業(yè)者而言,開設(shè)抖音小店是一個(gè)不錯(cuò)的選擇。但是,許多小店...詳情>>

      2023-10-08 15:01:21