mirror of
https://gitlab.com/octospacc/WinDog.git
synced 2025-06-05 22:09:20 +02:00
Add Copilot image scraping, update and fix telegram async, improve shared API
This commit is contained in:
102
ModWinDog/Scrapers/Scrapers.py
Executable file
102
ModWinDog/Scrapers/Scrapers.py
Executable file
@ -0,0 +1,102 @@
|
||||
# ================================== #
|
||||
# WinDog multi-purpose chatbot #
|
||||
# Licensed under AGPLv3 by OctoSpacc #
|
||||
# ================================== #
|
||||
|
||||
""" # windog config start # """
|
||||
|
||||
SeleniumDriversLimit = 2
|
||||
|
||||
""" # end windog config # """
|
||||
|
||||
currentSeleniumDrivers = 0
|
||||
|
||||
#from selenium import webdriver
|
||||
#from selenium.webdriver import Chrome
|
||||
#from selenium.webdriver.common.by import By
|
||||
from seleniumbase import Driver
|
||||
|
||||
def getSelenium() -> Driver:
|
||||
global currentSeleniumDrivers
|
||||
if currentSeleniumDrivers >= SeleniumDriversLimit:
|
||||
return False
|
||||
#options = webdriver.ChromeOptions()
|
||||
#options.add_argument("headless=new")
|
||||
#options.add_argument("user-data-dir=./Selenium-WinDog")
|
||||
#seleniumDriver = Chrome(options=options)
|
||||
currentSeleniumDrivers += 1
|
||||
return Driver(uc=True, headless2=True, user_data_dir=f"./Selenium-WinDog/{currentSeleniumDrivers}")
|
||||
|
||||
def closeSelenium(driver:Driver) -> None:
|
||||
global currentSeleniumDrivers
|
||||
try:
|
||||
driver.close()
|
||||
driver.quit()
|
||||
except:
|
||||
Log(format_exc())
|
||||
if currentSeleniumDrivers > 0:
|
||||
currentSeleniumDrivers -= 1
|
||||
|
||||
def cDalleSelenium(context, data) -> None:
|
||||
if not data.Body:
|
||||
return SendMsg(context, {"Text": "Please tell me what to generate."})
|
||||
#if not seleniumDriver:
|
||||
# SendMsg(context, {"Text": "Initializing Selenium, please wait..."})
|
||||
# loadSeleniumDriver()
|
||||
try:
|
||||
driver = getSelenium()
|
||||
if not driver:
|
||||
return SendMsg(context, {"Text": "Couldn't access a web scraping VM as they are all busy. Please try again later."})
|
||||
driver.get("https://www.bing.com/images/create/")
|
||||
driver.refresh()
|
||||
#retry_index = 3
|
||||
#while retry_index < 12:
|
||||
# time.sleep(retry_index := retry_index + 1)
|
||||
# try:
|
||||
#seleniumDriver.find_element(By.CSS_SELECTOR, 'form input[name="q"]').send_keys(data.Body)
|
||||
#seleniumDriver.find_element(By.CSS_SELECTOR, 'form a[role="button"]').submit()
|
||||
driver.find_element('form input[name="q"]').send_keys(data.Body)
|
||||
driver.find_element('form a[role="button"]').submit()
|
||||
try:
|
||||
driver.find_element('img[alt="Content warning"]')
|
||||
SendMsg(context, {"Text": "This prompt has been blocked by Microsoft because it violates their content policy. Further attempts might lead to a ban on your profile."})
|
||||
closeSelenium(driver)
|
||||
return
|
||||
except Exception: # warning element was not found, we should be good
|
||||
pass
|
||||
SendMsg(context, {"Text": "Request sent successfully, please wait..."})
|
||||
# except Exception:
|
||||
# pass
|
||||
retry_index = 3
|
||||
while retry_index < 12:
|
||||
# note that sometimes generation fails and we will never get any image!
|
||||
#try:
|
||||
time.sleep(retry_index := retry_index + 1)
|
||||
driver.refresh()
|
||||
img_list = driver.find_elements(#By.CSS_SELECTOR,
|
||||
'div.imgpt a img.mimg')
|
||||
if not len(img_list):
|
||||
continue
|
||||
img_array = []
|
||||
for img_url in img_list:
|
||||
img_url = img_url.get_attribute("src").split('?')[0]
|
||||
img_array.append({"url": img_url}) #, "bytes": HttpReq(img_url).read()})
|
||||
page_url = driver.current_url.split('?')[0]
|
||||
SendMsg(context, {
|
||||
"TextPlain": f'"{data.Body}"\n{{{page_url}}}',
|
||||
"TextMarkdown": (f'"_{CharEscape(data.Body, "MARKDOWN")}_"\n' + MarkdownCode(page_url, True)),
|
||||
"media": img_array,
|
||||
})
|
||||
closeSelenium(driver)
|
||||
break
|
||||
#except Exception as ex:
|
||||
# pass
|
||||
except Exception as error:
|
||||
Log(format_exc())
|
||||
SendMsg(context, {"TextPlain": "An unexpected error occurred."})
|
||||
closeSelenium(driver)
|
||||
|
||||
RegisterModule(name="Scrapers", endpoints={
|
||||
"DALL-E": CreateEndpoint(["dalle"], summary="Sends an AI-generated picture from DALL-E 3 via Microsoft Bing.", handler=cDalleSelenium),
|
||||
})
|
||||
|
Reference in New Issue
Block a user