解決selenium授權auth彈窗登錄問題

背景:模擬彈窗類型授權網站登錄,然後輸入關鍵詞進行查詢的交互操作

  • 如圖:
    在這裏插入圖片描述
  • 原因:
    • 彈窗不方便確認element代碼元素位置,難以獲取相關元素進行操作。
  • 解決辦法01
    • 核心代碼:
    browser.get("http://username:[email protected]/")
    
    • 說明:將登陸的用戶名和密碼按照上面的路徑進行放置,就可以正常訪問該頁面。
    • 詳細代碼:
    • 此處是根據關鍵詞獲取dubbo接口的ip和port信息代碼(僅供參考 用戶名和密碼均爲admin)
    	# 調用谷歌瀏覽器驅動並創建對象
        browser = webdriver.Chrome(executable_path="/Users/mac/projectsfiles/driver/chromedriver")
        # 打開瀏覽器 模擬瀏覽器請求頁面
        browser.get("http://admin:[email protected]/")
        # 睡眠0.5秒
        sleep(0.5)
        # 獲取頁面的標題
        print(browser.title)
        # 獲取頁面的源碼信息
        # print(browser.page_source)
        # 保存頁面快照
        browser.save_screenshot('images/admin-index.png')
        # 找到輸入框並輸入自定義關鍵詞(interface)
        browser.find_element_by_xpath('//*[@id="searchContent"]').send_keys(interface)
        # 找到查詢按鈕並模擬點擊事件
        browser.find_element_by_xpath('//*[@id="con_one_1"]/div[2]/a/img').click()
        # print(browser.page_source)
        browser.save_screenshot('images/admin-result.png')
        # 找到ip和port
        address = browser.find_element_by_xpath('//*[@id="table_o"]/tbody/tr[2]/td[2]/a').text
        print(address)
        if address == None:
            return "project or branch has been switched!"
        else:
            list = address.split(":")
            print("the ip and port are:" + list[0], list[1])
            return list
    
  • 解決辦法02
    • 一般這種類型的登錄成功後都會生成一個Authorization字段的授權碼,如圖:
      在這裏插入圖片描述
    • 如果賬號、密碼以及生成的Authorization字段不變的情況下,可以將這關鍵信息放到headers裏面,然後通過requests.get(url, headers=headers)進行請求即可,也可以實現上述功能。
    • 詳細代碼(不做詳細解釋):
url = "http://rpc-admin.middleware.k2.test.wacai.info/governance/services/%s/providers"%interface
    headers = {
        'Authorization': "Basic Z3Vlc3Q6Z3Vlc3Q=",
        'Accept': "*/*",
        'Accept-Language': "zh-CN,zh;q=0.9",
        'Cache-Control': "max-age=0",
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
        # 'Connection': "Keep-Alive",  #Connection:close  請求完自動斷開
        # 'Keep-Alive': "timeout=20", # 30s後自動關閉
        'Connection': 'close',
        'Cookies': "currentCellId=center",
        'Postman-Token': "0b2ab32e-a921-4641-95bb-65775d50b95c,6ae56e9c-d9fc-4be7-87f4-a2701613d8e3",
        'Host': "rpc-admin.middleware.k2.test.wacai.info",
        'Accept-Encoding': "gzip, deflate",
        'Cookie': 'currentCellId=center',
        'cache-control': "no-cache"
    }
    html = requests.get(url, headers=headers)
    print(html)
    Soup = BeautifulSoup(html, 'lxml')  # file本身是一個HTTPResponse類型的對象,通過調用它的read屬性返回網頁內容
    content = Soup.select('#table_o a')  # 定位class
    res = ''
    try:
        print(content[0].text)
        address = (content[0].text)  #如果使用unicode直接split會有u''格式
        list = address.split(':')
        print(content[0].text, list[0], list[1])
        return {"list": list, "code": 0}

~如果有參考價值 記得給好評哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章