老师,您好,为啥我按照您的程序写的,我试了好几次都没有使用cookies绕过登录,一直处于登录界面?

来源:2-8 使用cookies绕过登陆

慕移动6579933

2019-04-15

from selenium import webdriver
import time
import os
import json
path = "E:/Python/幕课网实战/chromedriver"
driver= webdriver.Chrome(path)
#将浏览器最大化
driver.maximize_window()

def save_cookies(driver):
    project_path  = os.path.dirname(os.getcwd())
    file_path = project_path+"/cookies/"
    print(file_path)
    if not os.path.exists(file_path):
        os.mkdir(file_path)
    cookies=driver.get_cookies()
    with open(file_path+'jd.cookies',"w") as c:
        #这里必须用json.dump方法写入文件
        #将来我们在取cookies时会使用json.loads方法
        #这样格式就不匹配了
        json.dump(cookies,c)
    print(cookies)
def Login():
    try:
        driver.get("https://www.jd.com/")
        driver.implicitly_wait(5)
        driver.find_element_by_link_text("你好,请登录").click()
        driver.find_element_by_link_text("账户登录").click()
        driver.find_element_by_id("loginname").send_keys("15216707828")
        driver.find_element_by_id("nloginpwd").send_keys("1234567")
        driver.find_element_by_id("loginsubmit").click()
        #保存cookie到文件中
        save_cookies(driver)
    finally:
        time.sleep(2)
def get_url_with_cookies():
    #使用https://order.jd.com/center/list.action个人订单页面是否能够访问成功来验证我们的cookies是否有效
    #获取cookies文件
    #os.getcwd()返回当前文件所在目录
    #os.path.dirname去掉文件名,返回目录即返回当前文件所在路径的上一级目录
    project_path = os.path.dirname(os.getcwd())
    file_path = project_path+"/cookies/"
    cookies_path =file_path+"/jd.cookies"
    jd_cookies_file = open(cookies_path,"r")
    jd_cookies_str =jd_cookies_file.readline()
    #加载cookies信息
    #使用json.loads()方法将json格式的cookies转化为python格式的cookies
    jd_cookies_dict = json.loads(jd_cookies_str)
    #这个地方我们必须先访问用一下网站,然后把旧的cookies删除掉之后
    #再将我们保存的cookies添加进去
    driver.get("https://www.jd.com/")
    driver.delete_all_cookies()
    #将cookies信息添加到driver中
    for cookie in jd_cookies_dict:
        driver.add_cookie(cookie)
    time.sleep(2)
    driver.get("https://order.jd.com/center/list.action")
if __name__ == "__main__":
    #Login()
    get_url_with_cookies()


写回答

1回答

大周

2019-04-15

你要先跑登陆,然后把cookies成功保存到文件里之后,再跑get_url_with_cookies方法。 注意保存cookies的时候,要保存登陆之后的cookies,这个登陆是指的手动登陆,手动的地方是识别验证码。  要在31行打上断点,手动识别了验证码后,再保存cookies,这个时候的cookies才是有效的。 仔细看我视频中如何打断点的,还有就是如何在断点之后运行的代码。 这个过程很重要 。  不是代码的问题。 

0
2
慕移动6579933
非常感谢!老师,已经可以了
2019-04-18
共2条回复

UI自动化测试经典项目实战 强化编程能力

从测试到测试开发的“快速通道”,让你掌握代码开发能力

298 学习 · 107 问题

查看课程