国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲-使用Selenium模擬百度登錄

這篇具有很好參考價值的文章主要介紹了Python爬蟲-使用Selenium模擬百度登錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

? ? 前面我已經(jīng)安裝好了Selenium并模擬成功了一下打開百度頁面并進行查詢,讓我這個python初學者信心倍增,今天再來試一試百度登錄

正文

把打開百度的代碼放到構(gòu)造方法中

ps:那個文件目錄是用于后面滑塊驗證圖片保存的。

    def __init__(self):
        driver = webdriver.Chrome()
        driver.get('https://www.baidu.com/')
        driver.maximize_window()
        self.page = driver
        self.filename = 'G:\\scroll\\'

點擊右上角的“登錄”按鈕,打開登錄框,

Python爬蟲-使用Selenium模擬百度登錄

代碼如下:

        driver = self.page
        driver.find_element(By.ID, 's-top-loginbtn').click()

?效果是這樣:

Python爬蟲-使用Selenium模擬百度登錄

?輸入用戶名和密碼,點擊登錄

        driver.find_element(By.ID, 'TANGRAM__PSP_11__userName').send_keys('用戶名')
        driver.find_element(By.ID, 'TANGRAM__PSP_11__password').send_keys('密碼')
        driver.find_element(By.ID, 'TANGRAM__PSP_11__submit').click()

運行之后,竟然出現(xiàn)了一個滑塊驗證窗口:

Python爬蟲-使用Selenium模擬百度登錄

?打算用selenium的鼠標事件,模擬拖拽滑塊的功能

先獲取滑塊的id,發(fā)現(xiàn)id竟然是動態(tài)變化的,后面有個隨機變化的數(shù)字

Python爬蟲-使用Selenium模擬百度登錄

沒辦法,只能使用xpath獲取頁面元素

/html/body/div[11]/div[1]/div/div[2]/div[2]

?再獲取滑塊要滑動的框的xpath

/html/body/div[11]/div[1]/div/div[2]/div[1]

并獲取這個div元素的寬度,進行移動,代碼如下

flybutton = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[2]')
ActionChains(driver).move_to_element(flybutton).perform()

 flybutton_div = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[1]')

print(flybutton_div.size['width'], flybutton_div.size['height'])

huakuia = ActionChains(driver)
huakuia.click_and_hold(flybutton).perform()

huakuia.move_by_offset(flybutton_div.size['width'], 0).perform()

huakuia.release()

運行了一下,效果是閃了一下,并沒有滑動

思考良久,并查資料后看到一篇設置鼠標移動軌跡的文章,遂獲得靈感,可能是移動的太快,被百度反爬工具發(fā)現(xiàn)了,于是每次5px循環(huán)的移動,

flybutton = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[2]')
        ActionChains(driver).move_to_element(flybutton).perform()

        flybutton_div = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[1]')

        print(flybutton_div.size['width'], flybutton_div.size['height'])

        huakuia = ActionChains(driver)
        huakuia.click_and_hold(flybutton).perform()
        x = flybutton_div.size['width']
        i = 0
        step = 5
        while i < x:
            i = i + step
            huakuia.move_by_offset(step, 0).perform()
            time.sleep(3)

        huakuia.release()

效果很好,哈哈~,我設置的移動一次休眠3秒,這個可以調(diào)快一些,不然心急的可能就認為沒有生效。

Python爬蟲-使用Selenium模擬百度登錄

?滑動滑塊是生效了,可是依然沒有登錄成功,因為系統(tǒng)要求的是把圖片放正,并不是把滑塊移動最右邊

又進行了大量資料的查詢,搜到一篇文章,是用python實現(xiàn)圖片方向變換的功能,最關鍵的是里面實現(xiàn)了計算圖片傾斜角度的計算,

地址是:python實現(xiàn)圖片歪斜糾正+代碼和注釋

關鍵代碼如下:

Python爬蟲-使用Selenium模擬百度登錄

繼續(xù)進行代碼改進

保存圖片:

    def save_pic(self, file):
        pic_url = self.page.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[1]/img').get_attribute('src')
         headers = {
             'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
         }
         res_s = requests.get(pic_url, headers=headers)
         data_s = res_s.content
         保存圖片
         with open(file, 'wb') as f:
             f.write(data_s)

獲得圖片傾斜角度

  def get_angle(self, file):
        # 讀取圖像
        img = cv2.imread(file)
        # 二值化
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 邊緣檢測
        edges = cv2.Canny(gray, 50, 150, apertureSize=3)

        # 霍夫變換,摘自https://blog.csdn.net/feilong_csdn/article/details/81586322
        lines = cv2.HoughLines(edges, 1, np.pi / 180, 0)
        for rho, theta in lines[0]:
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a * rho
            y0 = b * rho
            x1 = int(x0 + 1000 * (-b))
            y1 = int(y0 + 1000 * (a))
            x2 = int(x0 - 1000 * (-b))
            y2 = int(y0 - 1000 * (a))
        if x1 == x2 or y1 == y2:
            return 0
        t = float(y2 - y1) / (x2 - x1)
        # 得到角度后
        rotate_angle = math.degrees(math.atan(t))

改進后的滑塊驗證的代碼如下:


        huakuia = ActionChains(driver)
        huakuia.click_and_hold(flybutton).perform()
        x = flybutton_div.size['width']
        i = 0
        step = 5
        while i < x:
            i = i + step
            huakuia.move_by_offset(step, 0).perform()
            time.sleep(3)
            filepath = self.filename + 'scroll' + str(i) + '.png'
            print(filepath)
            self.save_pic(filepath)
            angle = self.get_angle(filepath)
            print('current angle is : %s', angle)
            if math.fabs(angle) < 3:
                break


        print('scroll complete')
        huakuia.release()

運行之后,還是沒有成功

最后發(fā)現(xiàn)計算的圖片傾斜角度都是一樣的,打開圖片保存目錄一看,是下面這樣的:?

Python爬蟲-使用Selenium模擬百度登錄

原來相同一個圖片,移動滑塊旋轉(zhuǎn)后保存的圖片都是一樣的,就是初始圖片的樣子,?怪不得失敗了。。。

繼續(xù)查資料,發(fā)現(xiàn)selenium有一個截圖的功能,于是使用這個截圖功能去保存旋轉(zhuǎn)后的圖片

        img = self.page.find_element(by=By.XPATH, value="/html/body/div[11]/div[1]/div/div[1]")
        data_s = img.screenshot(file)  # 截取后直接是二進制,無括號

保存圖片后發(fā)現(xiàn)還是沒有旋轉(zhuǎn)前的圖片,真是心累。。。。。

先記錄在這里,后面再改進吧文章來源地址http://www.zghlxwxcb.cn/news/detail-456736.html

到了這里,關于Python爬蟲-使用Selenium模擬百度登錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 爬蟲筆記--Selenium實現(xiàn)有驗證碼網(wǎng)站模擬登錄

    代碼如下: 一點說明: 安利個巨好用的識別驗證碼的庫 ddddocr gitHub:https://github.com/sml2h3/ddddocr 可能會在版本上遇到問題,我的報錯參考這篇文檔解決:https://blog.csdn.net/zhuchengchengct/article/details/124854199 我用的版本作為參考:python是3.9.13,ddddocr是1.4.2 如有問題,歡迎大家批評

    2024年02月16日
    瀏覽(25)
  • Python之selenium,使用webdriver模擬登錄網(wǎng)站(含驗證碼)

    Python之selenium,使用webdriver模擬登錄網(wǎng)站(含驗證碼)

    前段時間做了一個小項目,其中有一段需要自動獲取網(wǎng)站后臺的數(shù)據(jù),但是這個網(wǎng)站沒有任何提供給開發(fā)者的API,所以只能靠自己去探索。 起初想著用發(fā)送請求的方式去模擬登陸,獲取cookies,從而再獲取網(wǎng)站后臺數(shù)據(jù),但是因為自己太菜了一些原因,放棄了這個方法。 后來

    2024年02月02日
    瀏覽(23)
  • Python爬蟲入門:使用selenium庫,webdriver庫模擬瀏覽器爬蟲,模擬用戶爬蟲,爬取網(wǎng)站內(nèi)文章數(shù)據(jù),循環(huán)爬取網(wǎng)站全部數(shù)據(jù)。

    Python爬蟲入門:使用selenium庫,webdriver庫模擬瀏覽器爬蟲,模擬用戶爬蟲,爬取網(wǎng)站內(nèi)文章數(shù)據(jù),循環(huán)爬取網(wǎng)站全部數(shù)據(jù)。

    *嚴正聲明:本文僅限于技術討論與分享,嚴禁用于非法途徑。 目錄 準備工具: 思路: 具體操作: 調(diào)用需要的庫: 啟動瀏覽器驅(qū)動: 代碼主體: ?完整代碼(解析注釋): Python環(huán)境; 安裝selenium庫; Python編輯器; 待爬取的網(wǎng)站; 安裝好的瀏覽器; 與瀏覽器版本相對應的

    2023年04月24日
    瀏覽(103)
  • python爬蟲進階篇:Scrapy中使用Selenium模擬Firefox火狐瀏覽器爬取網(wǎng)頁信息

    接著上一篇的筆記,Scrapy爬取普通無反爬、靜態(tài)頁面的網(wǎng)頁時可以順利爬取我們要的信息。但是大部分情況下我們要的數(shù)據(jù)所在的網(wǎng)頁它是動態(tài)加載出來的(ajax請求后傳回前端頁面渲染、js調(diào)用function等)。這種情況下需要使用selenium進行模擬人工操作瀏覽器行為,實現(xiàn)自動化

    2024年02月04日
    瀏覽(102)
  • java爬蟲遇到網(wǎng)頁驗證碼怎么辦?(使用selenium模擬瀏覽器并用python腳本解析驗證碼圖片)

    ????????筆者這幾天在爬取數(shù)據(jù)的時候遇到了一個很鬧心的問題,就是在我爬取數(shù)據(jù)的時候遇到了驗證碼,而這個驗證碼又是動態(tài)生成的,嘗試了很多方法都沒能繞開這個驗證碼問題。 ? ? ? ? 我的解決方案是:使用selenium模擬瀏覽器行為,獲取到動態(tài)生成的驗證碼后用

    2024年02月09日
    瀏覽(175)
  • python 爬蟲熱身篇 使用 requests 庫通過 HTTP 讀取網(wǎng)絡數(shù)據(jù),使用 pandas 讀取網(wǎng)頁上的表格,使用 Selenium 模擬瀏覽器操作

    python 爬蟲熱身篇 使用 requests 庫通過 HTTP 讀取網(wǎng)絡數(shù)據(jù),使用 pandas 讀取網(wǎng)頁上的表格,使用 Selenium 模擬瀏覽器操作

    在過去,收集數(shù)據(jù)是一項繁瑣的工作,有時非常昂貴。機器學習項目不能沒有數(shù)據(jù)。幸運的是,我們現(xiàn)在在網(wǎng)絡上有很多數(shù)據(jù)可供我們使用。我們可以從 Web 復制數(shù)據(jù)來創(chuàng)建數(shù)據(jù)集。我們可以手動下載文件并將其保存到磁盤。但是,我們可以通過自動化數(shù)據(jù)收集來更有效地做

    2023年04月08日
    瀏覽(99)
  • Python爬蟲(4)-Selenium模擬鼠標操作

    Python爬蟲(4)-Selenium模擬鼠標操作

    在Selenium4.2以后的版本里面鼠標的操作方法都封裝在了ActionChains中需要時直接取即可。 使用方法就是調(diào)用ActionChains然后傳入你需要點擊的按鈕的位置即可 ActionChains(driver).double_click(f1).perform() perform()的意思就是執(zhí)行所有ActionChains中的動作 具體的操作方法如下 鼠標單擊就是直接

    2024年01月19日
    瀏覽(21)
  • Python + Selenium 模擬登錄jd

    Python + Selenium 模擬登錄jd

    最近有點時間,就隨便找點東西弄弄,倒也碰到了一些問題,在此記錄下 Python3.11.3 + selenium4.9.1 + opencv4.7 + PyAutoGUI0.9.54 + windows11 進入登錄頁面,登錄方式有兩種,這里直接定位點擊賬號登錄即可 看到驗證碼的圖片是base64格式的,可以通過src屬性來獲取,然后直接轉(zhuǎn)成cv圖片格

    2024年02月07日
    瀏覽(15)
  • python爬蟲之selenium模擬瀏覽器

    python爬蟲之selenium模擬瀏覽器

    之前在異步加載(AJAX)網(wǎng)頁爬蟲的時候提到過,爬取這種ajax技術的網(wǎng)頁有兩種辦法:一種就是通過瀏覽器審查元素找到包含所需信息網(wǎng)頁的真實地址,另一種就是通過selenium模擬瀏覽器的方法[1]。當時爬的是豆瓣,比較容易分析出所需信息的真實地址,不過一般大點的網(wǎng)站像

    2024年02月03日
    瀏覽(91)
  • 【python爬蟲】設計自己的爬蟲 4. 封裝模擬瀏覽器 Selenium

    有些自動化工具可以獲取瀏覽器當前呈現(xiàn)的頁面的源代碼,可以通過這種方式來進行爬取 一般常用的的有Selenium, playwright, pyppeteer,考慮到他們的使用有許多相同之處,因此考慮把他們封裝到一套api中 先看基類 Selenium是一個自動化測試工具,利用它可以驅(qū)動瀏覽器完成特定

    2024年02月03日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包