色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

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

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

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

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

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

  一、selenium簡介

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

  1、什么是selenium

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

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

  2、selenium的用途

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

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

  二、selenium的安裝與測試

  1、下載selenium模塊:

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

  或者在pycharm中下載

  2、安裝瀏覽器驅動

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

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

 

  國內鏡像網站地址:http://npm.taobao.org/mirrors/chromedrive

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

 

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

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

  (2) firefox瀏覽器驅動:

  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找到頁面中的標簽,進而觸發標簽事件,就會變的尤為重要。

  ○ 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參數表示的就是圖片標簽img

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

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

  5.通過xpath方式定位

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

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

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

  browser.find_element_by_link_text("設置")

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

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

  ○ selenium顯示等待和隱式等待

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

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

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

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

  `untilnot(method, message=' ')`:調用該方法提供的驅動程序作為一個參數,直到返回值為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')

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

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

driver.implicitly_wait() 默認設置為0

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

from selenium import webdriver

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

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

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

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的執行原理,當你調用ActionChains的方法時,不會立即執行,而是會將所有的操作按順序存放在一個隊列里,當你調用perform()方法時,隊列中的時間會依次執行。

  這種情況下我們可以有兩種調用方法:

  鏈式寫法

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

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

  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() ——執行鏈中的所有動作

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

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

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

  示例代碼:

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

try:
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    # 1、往jd發送請求
    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()

或者前進后退相關

import time
from selenium import webdriver

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

browser.find_element_by_partial_link_text('我是如何把計算機網絡考了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['套數'] = 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

 

更多關于python培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養模式,擁有國內一體化教學管理及學員服務,助力更多學員實現高薪夢想。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍
中文字幕乱码亚洲精品一区| 91在线码无精品| 北岛玲一区二区三区四区| 91福利国产精品| 激情久久久久久久久久久久久久久久| 日韩亚洲电影在线| 欧美亚洲综合久久| 亚洲第一二三四区| 欧美日韩一区二区三区不卡| 久久精品国产亚洲一区二区三区| 日韩毛片在线免费观看| 成人精品免费视频| 久久久久久**毛片大全| 欧美日韩视频一区二区| 91丝袜美腿高跟国产极品老师| 成人免费视频在线观看| 91精品国产综合久久小美女| 欧美激情一区在线| 欧美xxxx在线观看| 日本中文字幕一区二区有限公司| 国产一区二区三区| 91在线精品秘密一区二区| 99久久免费视频.com| 国产精品水嫩水嫩| 亚洲精品大片www| 色婷婷精品大视频在线蜜桃视频| 欧美日韩在线播放三区四区| 国产日本欧洲亚洲| 青青国产91久久久久久| 色偷偷一区二区三区| 亚洲区小说区图片区qvod| 国产suv精品一区二区三区| 欧美日韩卡一卡二| 亚洲女人的天堂| 99精品在线观看视频| 国产精品每日更新| 欧美精品久久天天躁| 国产一区二区成人久久免费影院| 精品国产一区二区三区不卡| 亚洲在线视频网站| 麻豆精品一区二区综合av| 日韩一区二区免费电影| 久久国产福利国产秒拍| 精品日韩99亚洲| 亚洲制服丝袜在线| 26uuu国产在线精品一区二区| 成人免费观看视频| 成人福利视频网站| 91亚洲永久精品| 天天免费综合色| 国产精品久久久久三级| 婷婷亚洲久悠悠色悠在线播放| 99久久99久久精品免费观看| 午夜天堂影视香蕉久久| 久久久精品天堂| 91碰在线视频| 国产精品一区二区久激情瑜伽 | 蜜桃一区二区三区在线| 中文字幕在线播放不卡一区| 国产成人精品免费视频网站| 精品一区二区三区影院在线午夜| 亚洲蜜桃精久久久久久久| 7777女厕盗摄久久久| 依依成人精品视频| 欧美性极品少妇| 亚洲欧美日韩久久| 日本福利一区二区| 欧美精品一区二区三| 狠狠色伊人亚洲综合成人| 日韩午夜在线观看| 色综合网站在线| 久久91精品国产91久久小草| 在线播放日韩导航| 国产精品自产自拍| 国产乱码精品1区2区3区| 午夜一区二区三区在线观看| 欧美性受xxxx黑人xyx性爽| 欧美日韩国产色站一区二区三区| 欧美精品在线观看播放| k8久久久一区二区三区| 五月天一区二区三区| 亚洲一区二区三区四区中文字幕| 国产精品国产精品国产专区不蜜| 日日夜夜精品视频免费| 欧美精品一区二区三区蜜桃视频| 91在线porny国产在线看| 欧美精品一卡两卡| 国产999精品久久| 国产精品久久网站| 久久青草国产手机看片福利盒子| 色综合久久久网| 国产宾馆实践打屁股91| 色综合欧美在线| 亚洲福利电影网| 暴力调教一区二区三区| 97国产精品videossex| 日韩专区中文字幕一区二区| 五月激情综合色| 99久久免费精品高清特色大片| 亚洲视频资源在线| 精品少妇一区二区三区视频免付费| 免费成人av资源网| 日本一区二区三区四区在线视频| 91麻豆123| 青草av.久久免费一区| 久久国产麻豆精品| 综合久久久久久久| 久久99国内精品| 久久久激情视频| 在线国产亚洲欧美| 成人精品鲁一区一区二区| 国产精品久久久久久一区二区三区 | 91色九色蝌蚪| 亚洲三级久久久| av电影天堂一区二区在线观看| 一区二区三区在线观看视频| 国产精品高潮呻吟| 欧美卡1卡2卡| 蜜桃在线一区二区三区| 欧美一区二区三区四区高清| 一区二区免费看| 99久久综合色| 色欧美片视频在线观看 | 亚洲激情图片一区| www.日韩精品| 欧美日韩综合在线| 亚洲超碰精品一区二区| 欧美一区二区三级| 日韩精品一区二区三区在线播放| 日韩不卡一区二区| 91国产丝袜在线播放| 久久久久久久网| 偷拍一区二区三区四区| 久久成人18免费观看| 亚洲综合无码一区二区| 国产欧美日韩精品一区| 欧美三级中文字幕| 久久综合狠狠综合| 国产三级精品三级| 婷婷综合另类小说色区| 亚洲麻豆国产自偷在线| 91精品蜜臀在线一区尤物| 成人av资源站| 欧美一区二区三区公司| 国产精品美女久久久久久久久 | 4hu四虎永久在线影院成人| 波多野结衣视频一区| 成人免费视频app| 日韩一区中文字幕| 国产精品亚洲一区二区三区妖精| 久久综合色婷婷| 色88888久久久久久影院野外| 一区二区三区在线免费视频| 欧美电影免费提供在线观看| 亚洲欧洲中文日韩久久av乱码| 国产精品黄色在线观看| 亚洲女同ⅹxx女同tv| 97久久精品人人澡人人爽| 色综合久久久久| 捆绑调教一区二区三区| 精品国产欧美一区二区| 欧美日韩视频一区二区| 国产在线精品免费| 亚洲精品欧美综合四区| 日本一区二区三区dvd视频在线| 国产综合久久久久久鬼色 | 日韩欧美激情四射| 免费在线观看视频一区| 中文字幕一区三区| 国产精品久久久久四虎| 成人av小说网| 色香色香欲天天天影视综合网| av电影在线观看一区| 久久精品这里都是精品| 欧美日韩情趣电影| 色综合久久天天综合网| 99久久精品国产导航| 91麻豆精品视频| fc2成人免费人成在线观看播放| 激情欧美日韩一区二区| 国产一区二区三区电影在线观看 | 欧美福利视频导航| 国产精品美女久久久久aⅴ| 一区二区三区在线免费视频 | 欧美一区二区三区视频免费播放 | 日韩国产在线观看一区| 国产一区啦啦啦在线观看| 99在线精品视频| 国产一区二区女| 欧美精品丝袜中出| 国产精品视频免费看| 精品一区二区综合| 6080国产精品一区二区| 麻豆免费看一区二区三区| 青草av.久久免费一区| 老司机精品视频在线| 色94色欧美sute亚洲线路二| 日韩欧美久久一区| 亚洲国产精品一区二区www| 国内成+人亚洲+欧美+综合在线|