Скачать список с сайта

alex1223321

Участник
Автор темы
41
0
Помогите скачать с форума все имена https://forum.gtarp.ru/threads/gtarp-obschij-chjornyj-spisok-gos-struktur.768014/ (Не реклама) то есть в список User_Name и сроки \n(новая строка)
прошу помощи 3-ий день пытаюсь решить проблему но при скачке пишет просто что типа <html><body><script>.... и т.д.
 
Последнее редактирование:

NoN4m3

Участник
78
5
Помогите скачать с форума все имена https://forum.gtarp.ru/threads/gtarp-obschij-chjornyj-spisok-gos-struktur.768014/ (Не реклама) то есть в список User_Name и сроки \n(новая строка)
прошу помощи 3-ий день пытаюсь решить проблему но при скачке пишет просто что типа <html><body><script>.... и т.д.
парси объект с классами: "messageText SelectQuoteContainer ugc baseHtml", и напиши шаблон парсера, зацепись за слово от которого будет начинатся и заканчиватся парс
 

alex1223321

Участник
Автор темы
41
0
<!DOCTYPE html>
<html>
<script src="/vddosw3data.js"></script>
<body>
<div w3-include-html="/gtarp.html"></div>
<noscript><h1 style="text-align:center;color:red;"><strong>Please turn JavaScript on and reload the page.</strong></h1></noscript>
<script>
w3IncludeHTML();
</script>
<script language="javascript">document.cookie="R3ACTLB=dda8b9a462020a287f68869257cf2c7b ; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/";setTimeout("location.href='https://forum.gtarp.ru:443/threads/gtarp-obschij-chjornyj-spisok-gos-struktur.768014/';",5000);</script>
<center>
<br />
<br />
<center/>
</body>
</html>

тут ничего нет
 

#Rin

Известный
Всефорумный модератор
1,214
1,035
Это Anti-DDoS защита.
R3ACTLB=dda8b9a462020a287f68869257cf2c7b
Тебе потребуется сохранить это значение и через 5 секунд повторно загрузить страницу отправив в HTTP заголовке "Cookie" сохраненное значение.
Используй ComObjCreate для создания WinHttpRequest с помощью которого и сможешь реализовать описанное выше.
 
  • Нравится
Реакции: Vintik и alex1223321

SCHWEITZER

Известный
104
71
Самый простой вариант (не сохраняет куки в текстовик, да оно тут и не требуется, по идее).

AutoHotKey:
url := "https://forum.gtarp.ru/threads/gtarp-obschij-chjornyj-spisok-gos-struktur.768014/"

cookie := RegExReplace(cURL(url), "m).*(R3ACTLB\=[A-Za-z0-9]+).*", "$1")

;Sleep, 5050 ;Работает без задержки, но не уверен, что будет работать всегда

result := cURL(url, cookie)

if (FileExist(path := A_ScriptDir "\dump-site.txt")) {
    FileDelete, % path
}
FileAppend, %result%, % path


cURL(url, cookie := "") {
    static whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    whr.Open("GET", url, true)
    whr.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
    whr.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
    whr.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0")

    if (StrLen(cookie)) {
        whr.SetRequestHeader("Cookie", cookie)
    }

    whr.Send()
    whr.WaitForResponse()

    return whr.ResponseText
}

Результат: https://pastebin.com/e7QsfNmD

P.S. Не писал на AHK больше 2х лет, не кидайтесь
 
Последнее редактирование:

BARRY BRADLEY

Известный
711
176
Узнай через браузер какие данные тебе надо отправить на сайт чтоб пройти эту защиту, в основном это какой то рандомный набор символов под каждый айпи. И просто отправляй в куках это параметры. Такое реализовать можно за несколько минут используя curl в PHP. На питоне вроде ещё проще. Как вариант сделать это на фрии хостинге и уже брать с него для АНК
 

Vintik

Мечтатель
Проверенный
1,410
851
Вот сделал на Пайтоне, может пригодиться.
Python:
import time
import requests
from bs4 import BeautifulSoup

HEADERS = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Mobile Safari/537.36', 'Accept': '*/*' }
link = 'https://forum.gtarp.ru/threads/gtarp-obschij-chjornyj-spisok-gos-struktur.768014/'

def antiDDoS():
    response = requests.get(link, headers=HEADERS)
    antiDDOS = response.text
    str = 'document.cookie="'
    str_finded = 0
    index = -1
    for i in range(len(antiDDOS)): # ищем подстроку str
        if str_finded == len(str):
            index = i
            break
        if antiDDOS[i] == str[str_finded]:
            str_finded += 1
        elif antiDDOS[i] == str[0]:
            str_finded = 1
        else:
            str_finded = 0
    if index != -1:
        str = ''
        str_finded = -1
        for i in range(index, len(antiDDOS)): # ищем подстроку ' '
            if antiDDOS[i] == ' ':
                str_finded = i
                break
            else:
                str = str + antiDDOS[i]
        if str_finded != -1:
            return str
    return ''

def getBlackList(headers):
    response = requests.get(link, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    unit = soup.find('li', class_='staff')
    if unit:
        unit.find('div', class_='messageContent')
        if unit:
            msg_text = unit.get_text()
            str = 'Люди находящиеся в ОЧС'
            str_finded = 0
            index = -1
            for i in range(len(msg_text)): # ищем подстроку str
                if str_finded == len(str):
                    index = i
                    break
                if msg_text[i] == str[str_finded]:
                    str_finded += 1
                elif msg_text[i] == str[0]:
                    str_finded = 1
                else:
                    str_finded = 0
            if index != -1: # ищем конец
                msg = '' # msg – текст между двумя подстроками (не отсортированный)
                str_finded = 0
                index2 = -1
                str = 'Спойлер: Старый лог'
                temp_str = ''
                for i in range(index, len(msg_text)): # ищем подстроку str
                    if str_finded == len(str):
                        index2 = i
                        break
                    if msg_text[i] == str[str_finded]:
                        str_finded += 1
                        temp_str = temp_str + msg_text[i]
                    elif msg_text[i] == str[0]:
                        str_finded = 1
                        temp_str = msg_text[i]
                    else:
                        msg = msg + temp_str + msg_text[i]
                        temp_str = ''
                        str_finded = 0
                if index2 != -1:
                    blackList = []
                    last_str = ''
                    for i in range(len(msg)): # удаляем лишние строки, сортируем в массив
                        if msg[i] != '\n':
                            last_str = last_str +  msg[i]
                        else:
                            if len(last_str) >= 5:
                                blackList.append(last_str)
                            last_str = ''
                    return blackList
    return []

def findBlackList(blackList, nickname):
    n = 0
    strs = ''
    for str in blackList:
        if nickname == '':
            strs = strs + str + '\n'
            n += 1
        else:
            str_finded = 0
            index = -1
            for i in range(len(str)): # ищем подстроку nickname
                if str_finded == len(nickname):
                    index = i
                    break
                if str[i] == nickname[str_finded]:
                    str_finded += 1
                elif str[i] == nickname[0]:
                    str_finded = 1
                else:
                    str_finded = 0
            if index != -1:
                strs = strs + str + '\n'
                n += 1
    return [n, strs]

def BlackList(nickname):
    cookie = antiDDoS()
    time.sleep(5)
    headers = HEADERS
    headers['Cookie'] = cookie
    blackList = getBlackList(headers)
    blackListLog = findBlackList(blackList, nickname)
    if blackListLog[0] == 0:
        return 'Ничего не найдено'
    return 'Найдено ' + str(blackListLog[0]) + ' записей:\n' + blackListLog[1]

print(BlackList(input()))
inp = input()
1617794091311.png
 
Последнее редактирование: