zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    什么是Servlet容器?
    JAVA
    BIO与NIO、AIO的区别(这个容易理解)
    深入分析JAVA IO(BIO、NIO、AIO)
    Undertow
    Consul CAP理论纠错
    JAVA BIO与NIO、AIO的区别
    Java-线程池专题(什么是线程池,如何使用,为什么要用)
    java中的重量级与轻量级概念
    Postman 把response的值自动放到变量里
  • 原文地址:https://www.cnblogs.com/lingwang3/p/7750156.html
Copyright © 2011-2022 走看看