背景:模擬彈窗類型授權網站登錄,然後輸入關鍵詞進行查詢的交互操作
- 如圖:
- 原因:
- 彈窗不方便確認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)進行請求即可,也可以實現上述功能。
- 詳細代碼(不做詳細解釋):
- 一般這種類型的登錄成功後都會生成一個Authorization字段的授權碼,如圖:
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}
~如果有參考價值 記得給好評哦~