sbtools/handler.py

123 lines
2.7 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
2017-09-09 12:40:28 +00:00
import glob, multiprocessing, re, requests, urllib.request, urllib.error, urllib.parse, time, os
import setuptools
useragent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0"
session = None
driver = None
def status():
global driver
2017-09-09 12:40:28 +00:00
if "Benutzername oder E-Mail-Adresse:" not in driver.page_source and 'href="login/"' not in driver.page_source:
return True
else:
return False
def loadPage(url, period=5, init = False):
global driver
if not (init or status()):
login()
driver.get(url)
time.sleep(period)
def loginHandler(user = setuptools.user(), password = setuptools.password()):
loadPage("https://scriptzbase.org/login/", 3, True)
2017-09-09 12:40:28 +00:00
curfield = driver.find_element_by_name("login")
curfield.send_keys(user)
2017-09-09 12:40:28 +00:00
curfield = driver.find_element_by_name("password")
curfield.send_keys(password)
curfield.send_keys(Keys.RETURN)
time.sleep(3)
return status()
class LoginError(Exception):
pass
def login():
global driver, session
if not (status() or loginHandler()):
raise LoginError("Login failed.")
2017-01-30 23:52:56 +00:00
2017-09-09 12:40:28 +00:00
session = requests.Session()
kekse = driver.get_cookies()
2017-09-09 12:40:28 +00:00
for keks in kekse:
2017-09-10 07:48:49 +00:00
session.cookies.set(keks["name"], keks["value"])
session.headers.update({"User-Agent": useragent})
return True
def fileHandler(url, retry = False):
global session
try:
fid = url.split("=")[1]
2017-09-14 14:10:08 +00:00
if not glob.glob("files/sbd%s_*" % fid):
res = session.get("https://scriptzbase.org/%s" % url)
fname = re.findall("filename=(.+)", res.headers["content-disposition"])[0].split(";")[0].strip('"')
with open("files/sbd%s_%s" % (fid, fname), "wb") as out:
out.write(res.content)
2017-09-13 16:15:53 +00:00
except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError):
if not retry:
time.sleep(10)
fileHandler(url, True)
else:
raise
def pageHandler():
global driver
juha = BeautifulSoup(driver.page_source, "html5lib")
2017-09-09 12:40:28 +00:00
for a in juha.findAll("a"):
2017-09-10 08:32:25 +00:00
try:
if "/download?version=" in a["href"]:
fileHandler(a["href"])
2017-09-10 08:32:25 +00:00
except KeyError:
pass
2017-09-09 12:40:28 +00:00
def siteHandler(p):
global driver
loadPage("https://scriptzbase.org/nulled_scripts/?page=" + str(p))
2017-09-09 12:40:28 +00:00
if driver.current_url[-len(str(p)):] == str(p):
pageHandler()
return True
2017-01-30 23:52:56 +00:00
return False
def mainHandler():
2017-09-10 08:32:25 +00:00
os.makedirs("files", exist_ok=True)
p = 1
while True:
if not siteHandler(p):
break
p += 1
def makeDriver():
caps = webdriver.DesiredCapabilities().PHANTOMJS.copy()
caps["phantoms.page.settings.userAgent"] = useragent
return webdriver.PhantomJS(desired_capabilities=caps)
if __name__ == "__main__":
driver = makeDriver()
mainHandler()
driver.close()