如何使用selenium和requests組合實(shí)現(xiàn)登錄頁面
這篇文章主要介紹了如何使用selenium和requests組合實(shí)現(xiàn)登錄頁面,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
一、在這里selenium的作用
(1)模擬的登錄。
(2)獲取登錄成功之后的cookies
代碼
def start_login(self):
chrome_options = Options()
# 禁止圖片加載,禁止推送通知
prefs = {
"profile.default_content_setting_values": {
"images": 2
}, "profile.default_content_setting_values.notifications": 2
}
chrome_options.add_experimental_option("prefs", prefs)
if chrome_args().get("headless_flag") == "1":
chrome_options.add_argument(chrome_args().get("headless"))
chrome_options.add_argument(chrome_args().get("nogpu"))
chrome_options.add_argument(chrome_args().get("noinfobars"))
chrome_options.add_argument(chrome_args().get("max_windows"))
chrome_options.add_argument(self.Proxy_server)
driver = webdriver.Chrome(chrome_options=chrome_options)
try:
get_logger().info("start login.....")
try:
# login info
self.login_name = self.loginInfo.get("login_id")
self.password = aes_cbc_decrypt(self.loginInfo.get("login_pwd"))
except Exception:
get_logger().error("cant get login info,here are detals".format(traceback.format_exc()))
wait = WebDriverWait(driver, 30)
print(u"start login in")
driver.get(self.login_url)
try:
login_id = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.Id_xpath))
)
login_id.send_keys(self.login_name)
login_id.send_keys(Keys.ENTER)
password = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.pwd_xpath))
)
password.send_keys(self.password)
submit = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.login_btn_xpath))
)
submit.click()
# login signal
#判斷是否顯示 右上角是否顯示用戶名
login_ok = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.login_ok_xpath))
)
try:
#判斷登錄成功
if login_ok:
get_logger().info("get user name successful:"+u"{}".format(login_ok.text))
try:
get_weibo_info=driver.find_element_by_xpath(self.forward_home_page)
except:
driver.get(self.first_page)
forward_home_page_ok = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.forward_home_page))
)
forward_home_page_ok.click()
time.sleep(5)
self.first_page=driver.current_url
get_logger().info("get homepage successful,url is {}".format(driver.current_url))
cookies = driver.get_cookies() # 導(dǎo)出cookie
get_logger().info("get cookies")
get_fansnum_ok= wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.follow_xpath))
)
self.get_followfanshome(driver)
get_logger().info("get_followfanshome ok")
self.home_page_source=driver.page_source
driver.close() # 關(guān)閉chrome
#獲取主頁的
# 如果需要保存cookies
self.write_cookie(cookies)
get_logger().info("get cookies,login ok")
return cookies
else:
raise RuntimeError('login failed')
except:
get_logger().error("login failed")
return None
except:
if driver is not None:
driver.close()
except Exception as e:
if driver is not None:
driver.close()
get_logger().error("dbs operation error,here are details:{}".format(traceback.format_exc()))
通過使用cookies = driver.get_cookies() #我們獲取了cookie那么我們怎用呢。
二、requests如何使用獲取到的cookies
1.創(chuàng)建一個(gè)Session對象
req = requests.Session() # 構(gòu)建Session
2.轉(zhuǎn)換上面的cookies對象
for cookie in cookies:
req.cookies.set(cookie['name'], cookie['value']) # 轉(zhuǎn)換cookies
3.開始訪問該網(wǎng)站的需求頁面
data = req.get(url, headers=self.headers).text #獲取文本網(wǎng)頁 jsondata = req.get(url, headers=self.headers).json() #獲取json型網(wǎng)頁
好了就是這么簡單,另外補(bǔ)充一個(gè)經(jīng)常使用的庫fake-useragent,可以獲取隨機(jī)的useragent,但是其中谷歌的useragent版本比較低,尤其在訪問知乎的時(shí)候,會(huì)提示瀏覽器版本低的信息,這一點(diǎn)需要注意。
另外擁有一個(gè)headers是對爬蟲起碼的尊重,所以有個(gè)構(gòu)建好的headers是非常必要的。我就經(jīng)常用下面的例:
from fake_useragent import UserAgent as UA
import random
headers = {
'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
'Accept - Encoding': 'gzip, deflate',
'Accept-Language': 'zh-Hans-CN, zh-Hans; q=0.5',
'Connection': 'Keep-Alive',
'User-Agent': UA().random #獲取隨機(jī)的useragent
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python基礎(chǔ)請求庫urllib模塊使用深入探究
在Python中,urllib庫是一個(gè)強(qiáng)大的模塊,用于處理URLs,它包含了多個(gè)子模塊,其中urllib.request是用于發(fā)出HTTP請求的核心組件,本文將深入探討urllib的基本使用、高級功能以及一些實(shí)際場景的示例,方便更全面地了解這個(gè)重要的網(wǎng)絡(luò)請求工具2024-01-01
如何使用yolov5輸出檢測到的目標(biāo)坐標(biāo)信息
YOLOv5是一系列在 COCO 數(shù)據(jù)集上預(yù)訓(xùn)練的對象檢測架構(gòu)和模型,下面這篇文章主要給大家介紹了關(guān)于如何使用yolov5輸出檢測到的目標(biāo)坐標(biāo)信息的相關(guān)資料,需要的朋友可以參考下2022-03-03
python實(shí)現(xiàn)DES加密解密方法實(shí)例詳解
這篇文章主要介紹了python實(shí)現(xiàn)DES加密解密方法,以實(shí)例形式較為詳細(xì)的分析了基于Python實(shí)現(xiàn)的DES加密與解密技巧,需要的朋友可以參考下2015-06-06
詳解python腳本自動(dòng)生成需要文件實(shí)例代碼
這篇文章主要介紹了詳解python腳本自動(dòng)生成需要文件實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
django 發(fā)送手機(jī)驗(yàn)證碼的示例代碼
本篇文章主要介紹了django 發(fā)送手機(jī)驗(yàn)證碼的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Python設(shè)置和解除Word文檔保護(hù)的實(shí)現(xiàn)步驟
在日常工作和學(xué)習(xí)中,我們經(jīng)常需要使用Word文檔來記錄和分享重要的信息,為了確保文檔內(nèi)容的安全性和完整性,了解如何保護(hù)和取消保護(hù)Word文檔顯得尤為重要,這篇博客將詳細(xì)介紹如何使用Python設(shè)置和解除Word文檔的保護(hù),需要的朋友可以參考下2025-02-02
python openpyxl提取Excel圖片實(shí)現(xiàn)原理技巧
在這篇文章中,將介紹如何使用openpyxl來提取Excel中的圖片,以及它的原理和技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python利用Django如何寫restful api接口詳解
這篇文章主要給大家介紹了關(guān)于Python利用Django如何寫restful api接口的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06

