请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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回答

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

0 回复 有任何疑惑可以回复我~
  • 提问者 慕移动6579933 #1
    好的,谢谢老师,我试试
    回复 有任何疑惑可以回复我~ 2019-04-18 11:00:39
  • 提问者 慕移动6579933 #2
    非常感谢!老师,已经可以了
    回复 有任何疑惑可以回复我~ 2019-04-18 11:12:09
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信