如何使用selenium和requests組合實(shí)現(xiàn)登錄頁面
這篇文章主要介紹了如何使用selenium和requests組合實(shí)現(xiàn)登錄頁面,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(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那么我們?cè)跤媚亍?/p>
二、requests如何使用獲取到的cookies
1.創(chuàng)建一個(gè)Session對(duì)象
req = requests.Session() # 構(gòu)建Session
2.轉(zhuǎn)換上面的cookies對(duì)象
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)頁
好了就是這么簡(jiǎn)單,另外補(bǔ)充一個(gè)經(jīng)常使用的庫fake-useragent,可以獲取隨機(jī)的useragent,但是其中谷歌的useragent版本比較低,尤其在訪問知乎的時(shí)候,會(huì)提示瀏覽器版本低的信息,這一點(diǎn)需要注意。
另外擁有一個(gè)headers是對(duì)爬蟲起碼的尊重,所以有個(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 }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
new_zeros() pytorch版本的轉(zhuǎn)換方式
今天小編就為大家分享一篇new_zeros() pytorch版本的轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02詳解將Python程序(.py)轉(zhuǎn)換為Windows可執(zhí)行文件(.exe)
這篇文章主要介紹了詳解將Python程序(.py)轉(zhuǎn)換為Windows可執(zhí)行文件(.exe),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-07-07Python編程快速上手——strip()函數(shù)的正則表達(dá)式實(shí)現(xiàn)方法分析
這篇文章主要介紹了Python strip()函數(shù)的正則表達(dá)式實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python基于正則表達(dá)式實(shí)現(xiàn)strip()函數(shù)的方法,需要的朋友可以參考下2020-02-02Python數(shù)據(jù)處理的六種方式總結(jié)
在 Python 的數(shù)據(jù)處理方面經(jīng)常會(huì)用到一些比較常用的數(shù)據(jù)處理方式,比如pandas、numpy等等。今天介紹的這款 Python 數(shù)據(jù)處理的管道數(shù)據(jù)處理方式,通過鏈?zhǔn)胶瘮?shù)的方式可以輕松的完成對(duì)list列表數(shù)據(jù)的處理,希望對(duì)大家有所幫助2022-11-11FastApi如何快速構(gòu)建一個(gè)web項(xiàng)目的實(shí)現(xiàn)
本文主要介紹了FastApi如何快速構(gòu)建一個(gè)web項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Python的條件表達(dá)式和lambda表達(dá)式實(shí)例
今天小編就為大家分享一篇Python的條件表達(dá)式和lambda表達(dá)式實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01