player.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from dataclasses import dataclass, field
  2. from typing import List, Dict
  3. from selenium import webdriver
  4. from selenium.webdriver.common.keys import Keys
  5. from selenium.webdriver.common.by import By
  6. from datetime import datetime
  7. import pandas as pd
  8. import re
  9. from config import Config
  10. @dataclass
  11. class Player():
  12. url:str = 'https://play.boobylegends.com/player/'
  13. driver:webdriver = None
  14. Cards:List[dict] = field(default_factory=list)
  15. asOf:datetime = datetime.utcnow()
  16. df:pd.DataFrame = field(default_factory=pd.DataFrame)
  17. rank:int = 0
  18. score:int = 0
  19. def fetchData(self):
  20. self.loadPage()
  21. self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
  22. userInfo=self.driver.find_element(By.CLASS_NAME, 'user-infos')
  23. self.score=int(userInfo.find_element(By.CLASS_NAME,'my-score').text)
  24. regex=re.compile('[^0-9]')
  25. self.rank=int(regex.sub('',userInfo.find_element(By.TAG_NAME,'span').text))
  26. collection=self.driver.find_element(By.CLASS_NAME, 'container-collection')
  27. self.Cards=[]
  28. cards=collection.find_elements(By.CLASS_NAME, 'wrapper-card')
  29. for card in cards:
  30. Card={}
  31. Card['card-num']=int(card.find_element(By.CLASS_NAME,'pornstar-number').text)
  32. Card['name']=card.find_element(By.TAG_NAME,'h2').text
  33. Card['card-id'] = int(card.get_attribute('card-id'))
  34. Card['phid'] = card.get_attribute('phid')
  35. Card['level'] = card.get_attribute('level')
  36. Card['link'] = card.get_attribute('href')
  37. try:
  38. Card['stock']=card.find_element(By.CLASS_NAME,'card-nb').text
  39. except:
  40. Card['stock']="0"
  41. self.Cards.append(Card)
  42. self.loadDF()
  43. def initPage(self):
  44. self.driver = webdriver.Chrome()
  45. self.driver.get(self.url)
  46. self.driver.add_cookie(Config["cookie"])
  47. def loadPage(self):
  48. if self.driver is None: self.initPage()
  49. self.driver.get(self.url)
  50. self.asOf=datetime.utcnow()
  51. def closePage(self):
  52. self.driver.close()
  53. def loadDF(self):
  54. self.df=pd.DataFrame(self.Cards)
  55. self.df.sort_values(by='card-num', ascending=True, inplace=True)
  56. def show(self,fields=['card-num','name','level','stock'],filter=''):
  57. print("Rank: {Rank}\tScore: {Score}\n".format(Rank=self.rank,Score=self.score))
  58. if filter != '':
  59. pdf=self.df.query(filter)
  60. else:
  61. pdf=self.df
  62. print(pdf[fields].to_string(index=False))