class Actir::CookiesBaidu

Public Class Methods

baifubao_BDUSS() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 223
def baifubao_BDUSS
  "BDUSS"
end
baifubao_STOKEN() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 227
def baifubao_STOKEN
  "STOKEN"
end
baifubao_account_file() click to toggle source

百度账号配置文件

# File lib/actir/script/cookies_baidu.rb, line 211
def baifubao_account_file
  File.join(Actir::Config.default_config_dir, "/pay.yaml")
end
baifubao_key() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 231
def baifubao_key
  "pay.baifubao"
end
clear_after_failure() click to toggle source

更新baidu_cookies失败后的清理操作。目前需要手动调用,后续优化

# File lib/actir/script/cookies_baidu.rb, line 173
def clear_after_failure
  if @browser != nil
    @browser.close
  end
end
directory() click to toggle source

获取cookies文件的路径 因为涉及到权限问题,路径需要放在个人账号目录下 通过whoami命令获取当前账户名称 暂时存放在/User/xx/目录下

# File lib/actir/script/cookies_baidu.rb, line 201
def directory
  user_home = `echo ~`
  return user_home.chomp + "/cookies/"
end
directory_exists?() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 193
def directory_exists?
  File::directory?(directory)
end
file_exists?() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 189
def file_exists?
  File::exists?(directory + file_name)
end
file_name() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 206
def file_name
  "cookies.yaml"
end
get_baifubao_cookies() click to toggle source

获取cookies

# File lib/actir/script/cookies_baidu.rb, line 160
def get_baifubao_cookies
  sleep 3
  # id =  @browser.cookies[:BAIDUID][:value]
  ss =  @browser.cookies[baifubao_BDUSS.to_sym][:value]
  stoken =  @browser.cookies[baifubao_STOKEN.to_sym][:value]
  @browser.close
  #cookies = "  BAIDUID:\s\s\s\s\s\s\"" + id + "\"\n  BDUSS:\s\s\s\s\s\s\s\s\"" + ss + "\"\n"
  #以hash形式返回
  # {:BAIDUID => id, :BDUSS => ss }
  {baifubao_BDUSS.to_sym => ss, baifubao_STOKEN.to_sym => stoken}
end
get_cookies(card) click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 185
def get_cookies(card)
  Actir::Config.get("cookies" + "." + card, directory)
end
get_useful_card() click to toggle source

获取可用的百度账号的hash 返回值{card1 => {“username” => “xxx”, “password”=>“iloveyouzan”, xxx}}

# File lib/actir/script/cookies_baidu.rb, line 92
def get_useful_card
  # old_config = Actir::Config.config_dir
  # Actir::Config.config_dir = script_config_path
  #通过配置文件判断取出可用的卡的参数
  baidu_card = Actir::Config.get(baifubao_key)
  card = {}
  baidu_card.each do |key, value|
    if value["available"] == true
      # 顺便取一下cookies
      baidu_card_cookies = Actir::Config.get("cookies." + key, directory)
      # value["BAIDUID"] = baidu_card_cookies["BAIDUID"]
      value[baifubao_BDUSS] = baidu_card_cookies[baifubao_BDUSS]
      value[baifubao_STOKEN] = baidu_card_cookies[baifubao_STOKEN]
      #有可用的卡,取出cookies等参数
      card.store(key, value)
      break
    end
  end
  # Actir::Config.config_dir = old_config
  card
end
init() click to toggle source

cookies文件初始化

# File lib/actir/script/cookies_baidu.rb, line 7
def init
  need_init_cookies = false
  
  #判断文件是否存在
  if file_exists?
    # 读取下配置文件中是否真的有cookies数据,如果没有一样要更新
    cookies = get_cookies("card1")
    # 判断存在的cookies文件是否有规范的cookies内容
    if cookies == nil
      need_init_cookies = true
    else
      if cookies.has_key?(baifubao_BDUSS) && cookies.has_key?(baifubao_STOKEN)
        if cookies[baifubao_BDUSS] == nil || cookies[baifubao_STOKEN] == nil
          need_init_cookies = true
        else
          need_init_cookies = false
        end
      else
        need_init_cookies = true
      end
    end 

  else
    if directory_exists?
      #文件不存在则看目录是否存在
      #目录存在则创建文件
      need_init_cookies = true
    else
      #目录和文件都不存在则创建目录再创建文件
      Dir.mkdir(directory)
      need_init_cookies = true
    end
  end

  if need_init_cookies == true
    file = File.new(directory + file_name, "w")
    file.syswrite(init_content)
    file.close
    # 暂时先只更新一张卡吧
    update_cookies("card1")
  end

end
init_content() click to toggle source

默认的配置文件内容,cookies的key

# File lib/actir/script/cookies_baidu.rb, line 216
def init_content
  "card1:\n" + 
  "  " + baifubao_BDUSS  + ": \n" + 
  "  " + baifubao_STOKEN + ": \n"
end
login_baifubao(username, password) click to toggle source

登录百付宝主页

# File lib/actir/script/cookies_baidu.rb, line 148
def login_baifubao(username, password)
  # 选择账号登陆(默认是短信快捷登录,所以需要点击切换一下)
  link_baifubao_login_back.wait_until_present
  link_baifubao_login_back.click
  # 输入账号密码
  text_baifubao_username.wait_until_present
  text_baifubao_username.set username
  text_baifubao_password.set password
  button_baifubao_login.click
end
modify_cookies(card, cookies) click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 179
def modify_cookies(card, cookies)
  cookies.each do |key, value|
    Actir::Config.set("cookies" + "." + card + "." + key.to_s , "\"" + value.to_s + "\"", directory)
  end
end
open_baifubao(address = []) click to toggle source

访问百付宝主页

# File lib/actir/script/cookies_baidu.rb, line 135
def open_baifubao(address = [])
  if address.size == 0
    if $mode == :remote
      address = Actir::Remote.get_remote_address(1)
    end
  end
  @browser = Browser.new(:www, :url => address[0], :mode => $mode, :browser => :chrome, :window_size => nil)
  # @browser.goto "baifubao.com"
  @browser.goto "https://www.baifubao.com/user/0/login/0"
  @browser 
end
re_available() click to toggle source

将所有百度支付卡的available状态恢复为true

# File lib/actir/script/cookies_baidu.rb, line 70
def re_available
  #每次登陆都判断一下cookies文件的上一次修改时间和当前时间
  #如果日期不同,则刷新所有的pay文件中baidu-card的状态
  unless Actir::Config.is_same_day?("cookies", directory)
    Actir::Config.lock("pay") do
      str_array = IO.readlines(baifubao_account_file)
      str_array.each_with_index do |line, index|
        if line =~ /available\:\s*false/  
          str_array[index] = line.gsub(/false/, 'true')
        end
      end
      cookiesfile = File.open(baifubao_account_file, 'w')
      str_array.each do |line|
        cookiesfile.puts line
      end
      cookiesfile.close
    end
  end
end
set_useless_card(card) click to toggle source

设置不可用的卡

# File lib/actir/script/cookies_baidu.rb, line 115
def set_useless_card(card)
  Actir::Config.set(baifubao_key + "." + card + "." + "available", "false")
end
update_all(address = []) click to toggle source

更新百度账号所有的配置文件

# File lib/actir/script/cookies_baidu.rb, line 52
def update_all(address = [])
  baidu_card = Actir::Config.get(baifubao_key)
  # 确认目前可用的卡的数目和cookies文件上的是否匹配
  # TODO 先不实现,cookies文件上的cards数量过多目前看不影响
  # baidu_card_cookies = Actir::Config.get("cookies", directory)
  # if baidu_card_cookies != nill && baidu_card != nil
  #   if baidu_card_cookies.size > baidu_card.size
  #
  #   end
  # else
  #   raise "no baifubao cards"
  # end
  baidu_card.each do |card, value|
    update_cookies(card, address)
  end
end
update_cookies(card, address = []) click to toggle source

更新配置文件中的baidu_cookies

# File lib/actir/script/cookies_baidu.rb, line 120
def update_cookies(card, address = [])
  #打开百付宝
  open_baifubao(address)
  #获取对应卡的账号密码
  args = Actir::Config.get(baifubao_key + "." + card)
  #登录百付宝
  login_baifubao(args["username"], args["password"])
  #获取cookies
  cookies = get_baifubao_cookies
  #清除之前的cookies
  modify_cookies(card, cookies)
  puts "Already update baifubao's cookies"
end

Private Class Methods

button_baifubao_login() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 245
def button_baifubao_login
  @browser.input(:id => 'TANGRAM__PSP_4__submit')
end
text_baifubao_password() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 241
def text_baifubao_password
  @browser.text_field(:id => 'TANGRAM__PSP_4__password')
end
text_baifubao_username() click to toggle source
# File lib/actir/script/cookies_baidu.rb, line 237
def text_baifubao_username
  @browser.text_field(:id => 'TANGRAM__PSP_4__userName')
end