1. 程式人生 > >selenium登錄網站獲取cookies請求其他數據

selenium登錄網站獲取cookies請求其他數據

login 可能 show add 直接 bsp sites ajax class

1.selenium登錄網站

1)selenium訪問起始網址後一定要等待登錄框完全渲染出現,無頁面的瀏覽器可以打印出page_source出來看是否登錄框已出現

2)登錄框已出現的情況下,如果給用戶名輸入框輸入值,發現報錯,說找不到此節點,則看下是否在iframe中,在的話,需要switch_to.frame進入

3)用戶名和密碼輸入間隔要像人輸入的時間差不多,過快可能會被發現是模擬點擊登陸

4)有的網站在登陸按鈕上設置障礙,可能會發現是非人操作,這時可以用enter操作代替,跳過點擊登錄這一步,完美避開

5)登錄後(判斷是否是登錄了,可以打印當前的current_url,看是否是登陸後的url)獲取cookies(這時要註意如果登錄在iframe,需要返回主頁面)賦值到requests

6)這時用requests去請求網站登錄後頁面,即可正常響應,不會跳到登錄頁

sites = []
s = requests.Session()
start_url = ‘https://passport.umeng.com/login?appId=cnzz‘
try:
print ‘登錄友盟‘
driver.delete_all_cookies()
driver.get(start_url)
# print driver.current_url ,driver.page_source
driver.switch_to.frame("alibaba-login-box") #進入登錄iframe
time.sleep(10)
elem_user = driver.find_element_by_id("fm-login-id")
time.sleep(10)
elem_user.send_keys("[email protected]");
elem_pwd = driver.find_element_by_id(‘fm-login-password‘)
time.sleep(10)
elem_pwd.send_keys("tangdaoya2016")
time.sleep(10)
elem_pwd.send_keys(Keys.ENTER) #網站模擬點擊登錄按鈕會出錯,直接在密碼輸完後enter進行登錄即可
time.sleep(10)
if driver.current_url != start_url:
print ‘登陸成功‘,driver.current_url
driver.switch_to_default_content()#需要返回主頁面,不然獲取的cookies不是登陸後cookies
list_cookies = driver.get_cookies()
cookies = {}
for s in list_cookies:
cookies[s[‘name‘]] = s[‘value‘]
requests.utils.add_dict_to_cookiejar(s.cookies, cookies) #將獲取的cookies帶入請求中
print ‘cookies:‘,cookies,self.config.url_list
url_list = ‘ttps://web.umeng.com/main.php?c=site&a=show&ajax=module=list|module=isOpenTongji&search=&currentPage=1&pageType=30&sort=0‘ #url_list是登陸後才能請求到數據的api
r = json.loads(s.get(url_list).content)
for temp in r[‘data‘][‘list‘][‘items‘]:
if isinstance(temp,dict):
sites.append({"siteid":temp["siteid"],"name":temp["name"]})

except:
print ‘登陸失敗‘
traceback.print_exc()
finally:
driver.quit()
display.stop()

selenium登錄網站獲取cookies請求其他數據