<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點(diǎn)選驗(yàn)證碼功能

          共 4230字,需瀏覽 9分鐘

           ·

          2020-12-25 04:19

          推薦閱讀??點(diǎn)擊標(biāo)題可跳轉(zhuǎn)

          零基礎(chǔ)將Python分成7個(gè)階段學(xué)習(xí),你會(huì)發(fā)現(xiàn)學(xué)習(xí)Python真的很簡(jiǎn)單

          寫在前面

          ??今天帶給大家一個(gè)突破點(diǎn)選驗(yàn)證碼的案例,利用爬蟲模擬登陸嗶哩嗶哩,并且把一些采坑的地方給大家強(qiáng)調(diào)一下!

          一、需求分析

          ??模擬登陸嗶哩嗶哩

          ??網(wǎng)站鏈接: https://passport.bilibili.com/login

          效果圖如下:

          驗(yàn)證成功后會(huì)自動(dòng)跳轉(zhuǎn)B站的登錄界面,為了保護(hù)我的信息安全,我用了假用戶名

          二、編程思路

          ??首先利用xpath或者css選擇器等方法找到要輸入內(nèi)容的元素位置,然后用自動(dòng)化爬蟲工具Selenium模擬點(diǎn)擊輸入等操作來(lái)進(jìn)行登錄并分析頁(yè)面,獲取點(diǎn)選驗(yàn)證碼的點(diǎn)選圖片,通過(guò)將圖片發(fā)送給快識(shí)別打碼平臺(tái)識(shí)別后獲取坐標(biāo)信息,根據(jù)快識(shí)別返回的數(shù)據(jù),模擬坐標(biāo)的點(diǎn)選,即可實(shí)現(xiàn)登錄。

          三、前期準(zhǔn)備

          1.下載chrome driver

          ??就是下載谷歌瀏覽器的驅(qū)動(dòng)器,當(dāng)然如果你用其他瀏覽器那么就要下載其他瀏覽器的相應(yīng)驅(qū)動(dòng),這里我以chrome瀏覽器為例,為什么要用英文呢?啊,這還用問(wèn)當(dāng)然是為了洋氣啦!(手動(dòng)狗頭)
          ??下載驅(qū)動(dòng)的時(shí)候必須要下載相應(yīng)的版本,可以在瀏覽器上方輸入chrome://version,即可查看自己的chrome版本。

          然后進(jìn)入 https://npm.taobao.org/mirrors/chromedriver/網(wǎng)站下載相應(yīng)版本的驅(qū)動(dòng)。

          2.安裝selenium庫(kù)

          ??由于是第三方庫(kù),所以在使用selenium之前需要先安裝:

          pip install selenium

          安裝的時(shí)候建議大家換鏡像源,具體方法可以參考這篇文章
          鏈接: https://www.jb51.net/article/202564.htm

          3.對(duì)接打碼平臺(tái)

          ??根據(jù)我們前面的編程思路我們需要到快識(shí)別網(wǎng)站http://www.kuaishibie.cn/根據(jù)給出的開發(fā)文檔和我們所需要的打碼功能構(gòu)建一個(gè)自己的api。

          代碼如下:

          1. #快識(shí)別網(wǎng)址 http://www.kuaishibie.cn/

          2. #interface

          3. import?base64

          4. import?json

          5. import?requests

          6. ?

          7. def?base64_api(uname,pwd,img):

          8. '''

          9. 驗(yàn)證碼識(shí)別接口

          10. :param uname: 快識(shí)別用戶名

          11. :param pwd: 快識(shí)別密碼

          12. :param img: 圖片路徑

          13. :return: 返回識(shí)別結(jié)果

          14. '''

          15. with?open(img,?'rb')?as?f:

          16. base64_data?=?base64.b64encode(f.read())

          17. b64?=?base64_data.decode()

          18. data?=?{"username":?uname,?"password":?pwd,?"image":?b64,"typeid":21}

          19. #result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)

          20. result?=?json.loads(requests.post("http://api.ttshitu.com/imageXYPlus",?json=data).text)

          21. if?result['success']:

          22. return?result["data"]["result"]

          23. else:

          24. return?result["message"]

          三、完整代碼

          ??代碼中的一些難點(diǎn)和相關(guān)步驟我都做了注釋,根據(jù)上面給出的編程思路大家一步一步做就好了,我就不再詳細(xì)解釋了,如果任何問(wèn)題歡迎評(píng)論區(qū)提問(wèn)或者私信我都可以喔~

          1. #login_bilibili

          2. from?selenium?import?webdriver

          3. import?time

          4. from?PIL?import?Image

          5. from?selenium.webdriver?import?ActionChains?#導(dǎo)入動(dòng)作鏈模塊

          6. ?

          7. ?

          8. KUAI_USERNAME?=?'快識(shí)別賬號(hào)'

          9. KUAI_PASSWORD?=?'快識(shí)別密碼'

          10. ?

          11. USERNAME?=?'B站賬號(hào)'

          12. PASSWORD?=?'B站密碼'

          13. ?

          14. #創(chuàng)建瀏覽器對(duì)象

          15. driver?=?webdriver.Chrome(executable_path='chromedriver.exe')

          16. #打開請(qǐng)求網(wǎng)頁(yè)頁(yè)面

          17. driver.get('https://passport.bilibili.com/login')

          18. driver.implicitly_wait(10)?#隱式等待瀏覽器渲染完成,sleep是強(qiáng)制等待

          19. #driver.execute_script("document.body.style.zoom='0.67'") #瀏覽器內(nèi)容縮放67%

          20. driver.maximize_window()#最大化瀏覽器

          21. ?

          22. '''

          23. 用selenium自動(dòng)化工具操作瀏覽器,操作的順序和平常用瀏覽器操作的順序是一樣的

          24. '''

          25. ?

          26. '''

          27. 找到用戶名和密碼框輸入密碼

          28. '''

          29. user_input?=?driver.find_element_by_xpath('//*[@id="login-username"]')?#使用xpath定位用戶名標(biāo)簽元素

          30. user_input.send_keys(USERNAME)

          31. time.sleep(1)

          32. ?

          33. user_input?=?driver.find_element_by_xpath('//*[@id="login-passwd"]')?#用戶密碼標(biāo)簽

          34. user_input.send_keys(PASSWORD)

          35. time.sleep(1)

          36. ?

          37. #點(diǎn)擊登錄

          38. Login_input?=?driver.find_element_by_css_selector('#geetest-wrap > div > div.btn-box > a.btn.btn-login')

          39. Login_input.click()

          40. time.sleep(5)

          41. ?

          42. #對(duì)圖片驗(yàn)證碼進(jìn)行提取

          43. img_label?=?driver.find_element_by_css_selector('body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_no_logo.geetest_panelshowclick > div.geetest_panel_next > div > div')?#提取圖片標(biāo)簽

          44. ?

          45. #保存圖片

          46. driver.save_screenshot('big.png')?#截取當(dāng)前整個(gè)頁(yè)面

          47. time.sleep(5)

          48. #location可以獲取這個(gè)元素左上角坐標(biāo)

          49. print(img_label.location)

          50. #size可以獲取這個(gè)元素的寬(width)和高(height)

          51. print(img_label.size)

          52. ?

          53. #計(jì)算驗(yàn)證碼的左右上下橫切面

          54. left?=?img_label.location['x']

          55. top?=?img_label.location['y']

          56. right?=?img_label.location['x']?+?img_label.size['width']

          57. down?=?img_label.location['y']?+?img_label.size['height']

          58. ?

          59. im?=?Image.open('big.png')

          60. im?=?im.crop((left,top,right,down))

          61. im.save('yzm.png')

          62. ?

          63. #對(duì)接打碼平臺(tái)

          64. from?interface?import?base64_api?#顯示報(bào)錯(cuò)也無(wú)妨,可以運(yùn)行的不要被唬住

          65. ?

          66. img_path?=?'yzm.png'

          67. result?=?base64_api(uname=KUAI_USERNAME,?pwd=KUAI_PASSWORD,?img=img_path)

          68. print(result)

          69. print('驗(yàn)證碼識(shí)別結(jié)果:',?result)

          70. result_list?=?result.split('|')

          71. for?result?in?result_list:

          72. x?=?result.split(',')[0]

          73. y?=?result.split(',')[1]

          74. ActionChains(driver).move_to_element_with_offset(img_label,?int(x),?int(y)).click().perform()?# perform()執(zhí)行整個(gè)動(dòng)作鏈

          75. ?

          76. #點(diǎn)擊確認(rèn)按鈕

          77. driver.find_element_by_css_selector('body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_no_logo.geetest_panelshowclick > div.geetest_panel_next > div > div > div.geetest_panel > a > div').click()

          78. input()?# 用戶輸入 阻塞瀏覽器關(guān)閉

          79. # 關(guān)閉瀏覽器

          80. driver.quit()

          注:chrome driver一定要和項(xiàng)目文件放在一起,這樣更加方便也更穩(wěn)定。interface接口文件最好也喝項(xiàng)目文件在一起,方便import導(dǎo)入

          ??然后就可以自動(dòng)登錄到B站啦,還在等什么,趕緊試試吧~

          掃下方二維碼加老師微信

          或是搜索老師微信號(hào):XTUOL1988【切記備注學(xué)習(xí)Python】

          領(lǐng)取Python web開發(fā),Python爬蟲,Python數(shù)據(jù)分析,人工智能等學(xué)習(xí)教程。帶你從零基礎(chǔ)系統(tǒng)性的學(xué)好Python!

          也可以加老師建的Python技術(shù)學(xué)習(xí)教程qq裙:245345507,二者加一個(gè)就可以!

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          *聲明:本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來(lái)源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜

          瀏覽 83
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  伊人黄色电影 | 在线无码免费观看 | 7777奇米影视 | 免费播放的a片 | gogo大胆无码无码免费视频 |