Skip to content
This repository was archived by the owner on Feb 22, 2025. It is now read-only.

Commit bdcc98e

Browse files
authored
Merge pull request #814 from rix1337/dev
Upgrade to version 21.0.1 and update captcha provider references.
2 parents 069968c + e83d2fd commit bdcc98e

File tree

10 files changed

+33
-123
lines changed

10 files changed

+33
-123
lines changed

feedcrawler/providers/config.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class CrawlerConfig(object):
2727
("port", "int", "9090"),
2828
("prefix", "str", ""),
2929
("interval", "int", "60"),
30-
("sponsors_helper", "str", ""),
3130
("flaresolverr", "str", ""),
3231
("english", "bool", "False"),
3332
("surround", "bool", ""),

feedcrawler/providers/http_requests/cache_handler.py

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from feedcrawler.providers.common_functions import site_blocked, site_blocked_with_advanced_methods
1212
from feedcrawler.providers.http_requests.cloudflare_handlers import flaresolverr_task
1313
from feedcrawler.providers.http_requests.cloudflare_handlers import get_solver_url
14-
from feedcrawler.providers.http_requests.cloudflare_handlers import sponsors_helper_task
1514
from feedcrawler.providers.http_requests.request_handler import request
1615
from feedcrawler.providers.sqlite_database import FeedDb
1716

@@ -53,7 +52,6 @@ def cached_request(url, method='get', params=None, headers=None, redirect_url=Fa
5352
if dont_cache:
5453
shared_state.logger.debug("Aufruf ohne HTTP-Cache: " + url)
5554

56-
sponsors_helper_url = get_solver_url("sponsors_helper")
5755
flaresolverr_url = get_solver_url("flaresolverr")
5856

5957
if not headers:
@@ -76,29 +74,16 @@ def cached_request(url, method='get', params=None, headers=None, redirect_url=Fa
7674
proxies = {}
7775
force_ipv4 = False
7876

79-
flaresolverr_run = False
80-
allow_sponsors_helper_run = False
81-
if sponsors_helper_url and not flaresolverr_url:
82-
allow_sponsors_helper_run = True
83-
8477
while True:
8578
try:
8679
if site_blocked(url):
8780
if site_blocked_with_advanced_methods(url):
8881
print(f"Der Aufruf von {url} wurde blockiert!")
8982
return {'status_code': status_code, 'text': text, 'headers': response_headers, 'url': url}
90-
if allow_sponsors_helper_run: # will only be used when flaresolverr is not available or not working
91-
cookiejar, user_agent, proxy = sponsors_helper_task(sponsors_helper_url, url)
92-
proxies = {"http": proxy, "https": proxy}
93-
headers['User-Agent'] = user_agent
94-
force_ipv4 = False
95-
flaresolverr_run = False
96-
elif flaresolverr_url:
83+
if flaresolverr_url:
9784
cookiejar, user_agent = flaresolverr_task(flaresolverr_url, url)
9885
headers['User-Agent'] = user_agent
9986
force_ipv4 = True
100-
flaresolverr_run = True
101-
allow_sponsors_helper_run = True
10287

10388
if method == 'post':
10489
response = request(url, method="POST", data=params, timeout=60, headers=headers,
@@ -115,16 +100,13 @@ def cached_request(url, method='get', params=None, headers=None, redirect_url=Fa
115100
normal_blocked = db_status.retrieve(site + "_normal")
116101
if not normal_blocked:
117102
db_status.store(site + "_normal", "Blocked")
118-
if sponsors_helper_url or flaresolverr_url:
103+
if flaresolverr_url:
119104
print("Versuche es mit Cloudfare-Umgehung erneut...")
120105
continue # try again with any solver
121106
else:
122107
advanced_blocked = db_status.retrieve(site + "_advanced")
123108
if not advanced_blocked:
124109
db_status.store(site + "_advanced", "Blocked")
125-
if flaresolverr_run and allow_sponsors_helper_run:
126-
print("Lösung mit FlareSolverr gescheitert. Versuche es mit Sponsors Helper...")
127-
continue # try again with sponsors helper
128110
return {'status_code': status_code, 'text': text, 'headers': response_headers, 'url': url}
129111

130112
if redirect_url:

feedcrawler/providers/http_requests/cloudflare_handlers.py

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -142,67 +142,6 @@ def test_challenge_path(url):
142142
return "/"
143143

144144

145-
def sponsors_helper_task(solver_url, url):
146-
base_domain = url.split("/")[2]
147-
last_solution = unpickle_db("sponsors_helper", base_domain)
148-
if last_solution:
149-
try:
150-
if last_solution["valid_until"] > int(time.time()):
151-
cookiejar = cookie_dict_to_cookiejar(last_solution["cookies"])
152-
user_agent = last_solution["user_agent"]
153-
proxy = get_local_proxy_url(solver_url, last_solution["proxy"])
154-
if cookiejar:
155-
shared_state.logger.debug("Bestehende Cloudflare-Cookies werden für " + url + " verwendet.")
156-
return cookiejar, user_agent, proxy
157-
else:
158-
clean_db("sponsors_helper", base_domain)
159-
except:
160-
pass
161-
162-
if test_solver_url("sponsors_helper", solver_url + "/status"):
163-
shared_state.logger.debug(f"Versuche Cloudflare auf der Seite {url} mit Sponsors Helper zu umgehen...")
164-
165-
solver_endpoint = "/cloudflare_cookie/"
166-
solver_payload = {
167-
'url': "https://" + base_domain + test_challenge_path(url)
168-
}
169-
170-
response = request(
171-
solver_url + solver_endpoint,
172-
method="POST",
173-
json=solver_payload,
174-
timeout=180)
175-
176-
if response.status_code == 200:
177-
try:
178-
response = loads(response.text)
179-
cookies = response["cookies"]
180-
if cookies:
181-
cookiejar = cookie_dict_to_cookiejar(cookies)
182-
user_agent = response["user_agent"]
183-
proxy = get_local_proxy_url(solver_url, response["proxy"])
184-
valid_until = int(time.time()) + 1800 - 60
185-
186-
pickle_db("sponsors_helper",
187-
base_domain,
188-
{
189-
"cookies": cookies,
190-
"user_agent": user_agent,
191-
"proxy": proxy,
192-
"valid_until": valid_until
193-
})
194-
195-
shared_state.logger.debug(
196-
"Die Erzeugung von Cloudflare-Cookies für " + url + " war mit Sponsors Helper erfolgreich.")
197-
return cookiejar, user_agent, proxy
198-
except:
199-
pass
200-
else:
201-
shared_state.logger.debug(
202-
"Die Erzeugung von Cloudflare-Cookies für " + url + " ist mit Sponsors Helper fehlgeschlagen.")
203-
return False, False
204-
205-
206145
def flaresolverr_task(solver_url, url):
207146
base_domain = url.split("/")[2]
208147
last_solution = unpickle_db("flaresolverr", base_domain)

feedcrawler/providers/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
def get_version():
11-
return "21.0.0"
11+
return "21.0.1"
1212

1313

1414
def create_version_file():

feedcrawler/run.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ def main():
104104
else:
105105
myjd_config(port, local_address, shared_state)
106106

107+
shared_state.update("connected", False)
107108
process_jdownloader = multiprocessing.Process(target=jdownloader_connection,
108109
args=(shared_state_dict, shared_state_lock))
109110
process_jdownloader.start()
@@ -129,10 +130,17 @@ def main():
129130

130131
if arguments.delay:
131132
delay = int(arguments.delay)
132-
print(f"Verzögere den ersten Suchlauf um {delay} Sekunden")
133-
time.sleep(delay)
133+
else:
134+
delay = 60
134135

135136
if not os.environ.get('GITHUB_ACTION_PR'):
137+
try:
138+
while not shared_state.values["connected"]:
139+
print(f"Verbindung zu JDownloader noch nicht hergestellt - verzögere Suchlauf um {delay} Sekunden")
140+
time.sleep(60)
141+
except KeyboardInterrupt:
142+
sys.exit(1)
143+
136144
process_feed_crawler = multiprocessing.Process(target=feed_crawler,
137145
args=(shared_state_dict, shared_state_lock,))
138146
process_feed_crawler.start()
@@ -178,16 +186,21 @@ def jdownloader_connection(shared_state_dict, shared_state_lock):
178186

179187
shared_state.set_device_from_config()
180188
connection_established = shared_state.get_device() and shared_state.get_device().name
181-
if not connection_established:
182-
i = 0
183-
while i < 10:
184-
i += 1
185-
print(f'Verbindungsversuch {i} mit My JDownloader gescheitert. Gerätename: "{device}"')
186-
time.sleep(60)
187-
set_device_from_config()
188-
connection_established = shared_state.get_device() and shared_state.get_device().name
189-
if connection_established:
190-
break
189+
190+
try:
191+
if not connection_established:
192+
i = 0
193+
while i < 10:
194+
i += 1
195+
print(f'Verbindungsversuch {i} mit My JDownloader gescheitert.')
196+
time.sleep(60)
197+
set_device_from_config()
198+
connection_established = shared_state.get_device() and shared_state.get_device().name
199+
if connection_established:
200+
shared_state.update("connected", True)
201+
break
202+
except KeyboardInterrupt:
203+
sys.exit(1)
191204

192205
if connection_established:
193206
print(f'Erfolgreich mit My JDownloader verbunden. Gerätename: "{shared_state.get_device().name}"')

feedcrawler/web_interface/serve/api.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ def redirect_sponsors():
261261

262262
@app.get(prefix + "/redirect_captcha/")
263263
def redirect_captcha():
264-
redirect("https://getcaptchasolution.com/zuoo67f5cq")
264+
redirect("https://deathbycaptcha.com/register?refid=6184288242b")
265265

266266
@app.get(prefix + "/redirect_hoster/")
267267
def redirect_captcha():
@@ -301,7 +301,6 @@ def get_settings():
301301
"port": port,
302302
"prefix": general_conf.get("prefix"),
303303
"interval": to_int(general_conf.get("interval")),
304-
"sponsors_helper": general_conf.get("sponsors_helper"),
305304
"flaresolverr": general_conf.get("flaresolverr"),
306305
"english": general_conf.get("english"),
307306
"surround": general_conf.get("surround"),
@@ -441,7 +440,6 @@ def post_settings():
441440
if to_int(interval) < 5:
442441
interval = '5'
443442
section.save("interval", interval)
444-
section.save("sponsors_helper", to_str(data['general']['sponsors_helper']))
445443
section.save("flaresolverr", to_str(data['general']['flaresolverr']))
446444
section.save("english", to_str(data['general']['english']))
447445
section.save("surround", to_str(data['general']['surround']))

feedcrawler/web_interface/vuejs_frontend/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

feedcrawler/web_interface/vuejs_frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "feedcrawler-web",
3-
"version": "21.0.0",
3+
"version": "21.0.1",
44
"type": "module",
55
"scripts": {
66
"dev": "vite",

feedcrawler/web_interface/vuejs_frontend/src/components/Help.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ const waitTimeActive = computed(() => {
358358
data-bs-parent="#accordionHelp">
359359
<div class="accordion-body">
360360
<button class="btn btn-outline-success" @click="openCaptchaLink">
361-
Anti-Captcha.com (schnelles Lösen von reCAPTCHA, cutcaptcha, etc. - auch im Browser)
361+
DeathByCaptcha.com (schnelles Lösen von reCAPTCHA, cutcaptcha, etc. - auch im Browser)
362362
</button>
363363
</div>
364364
</div>

feedcrawler/web_interface/vuejs_frontend/src/components/Settings.vue

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -349,27 +349,6 @@ function updatePlexUrl() {
349349
<div id="collapseSolvers" aria-labelledby="headingSolvers" class="accordion-collapse collapse"
350350
data-bs-parent="#accordionSettings">
351351
<div class="accordion-body">
352-
<FormKit v-model="store.settings.general.sponsors_helper"
353-
help="Hier die URL des durch FeedCrawler erreichbaren Sponsors Helpers (Port 9700) angeben. Der Sponsors Helper wird für jede Seite genutzt, auf der eine Blockade durch Cloudflare erkannt wurde."
354-
help-class="text-muted"
355-
input-class="form-control bg-light mb-2"
356-
label="Sponsors-Helper-URL"
357-
messages-class="text-danger"
358-
outer-class="mb-4"
359-
placeholder="Bspw. http://192.168.0.1:9700"
360-
type="url"
361-
validation="url"
362-
validation-visibility="live"/>
363-
<div class="mb-4">
364-
<mark>
365-
Die zuverlässigste Möglichkeit, Cloudflare-Blockaden zu umgehen, ist dafür zu bezahlen.<br>
366-
Über den Sponsors Helper ist es möglich, vor dem Suchlauf erkannte Cloudflare-Blockaden zu
367-
umgehen.
368-
Dabei wird pro blockierter Seite ein kurzfristig gültiger Cloudflare-Cookie erzeugt, der dann für
369-
den Suchlauf verwendet wird. Die Kosten pro Seite und Suchlauf liegen im Sub-Cent-Bereich.<br>
370-
Um Kosten zu sparen, kann parallel ein FlareSolverr betrieben werden.
371-
</mark>
372-
</div>
373352
<FormKit v-model="store.settings.general.flaresolverr"
374353
help="Hier die URL eines durch FeedCrawler erreichbaren FlareSolverrs angeben. FlareSolverr wird für jede Seite genutzt, auf der eine Blockade durch Cloudflare erkannt wurde."
375354
help-class="text-muted"

0 commit comments

Comments
 (0)