selenium登录网站获取cookies请求其他数据

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("用户名");
elem_pwd = driver.find_element_by_id('fm-login-password')
time.sleep(10)
elem_pwd.send_keys("密码")
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()

原文地址:https://www.cnblogs.com/lingwang3/p/7750156.html