JavaScript парсеры: расширенный функционал A-Parser

Это гуглтранслейт, но мне нужен не перевод, а код страницы, ссылку отправил
 
Подскажите плз, как в js парсере иметь возможность гадать рекапчу2?
 
Через this.parser.request, обращаясь к стандартному Util::ReCaptcha2 Util::ReCaptcha2. В качестве запроса нужно передавать sitekey[ПРОБЕЛ]url, где sitekey - это sitekey рекаптчи, url - урл страницы, на которой выдалась рекаптча.
Пример:
Код:
let recaptcha = yield this.parser.request('Util::ReCaptcha2', this.conf.Util_ReCaptcha2_preset, {}, sitekey + ' ' + url);
 
Как в js парсере сохранять данные для работы, чтобы они были доступны всем потокам во время работы?
т.е например.
1. стартует парсер, lvl=0, инициализируем данные, которые будем использовать во всех потоках, создаем потоки через this.query.add(<data>, maxlevel);
2. для всех потоков с lvl>0 делаем какую-то работу с использованием <данных которые мы инициализировали в п.1.>

Как сделать красиво? без sql и сохранением данных на диск?
В Template Toolkit есть такая возможность через global.varname= <data> и эти данные доступны в каждом потоке, а как делать в JS парсере?
 
Добрый вечер.
Помогите пожалуйста понять логику параметра check_content - как он работает?
К примеру у меня возможны два варианта валидности прокси и ответа(т.е. хотя бы один из вариантов текста, должен присутствовать на странице), я перечисляю их в check_content как: ['first', 'second'] но всегда получаю content mismatch каждый раз в не зависимости если текст на странице или нет.
Пробовал и так ['first|second'] и все равно получаю content mismatch, хотя в отладочном окне я вижу, что хотя бы один из вариантов присутствует на странице.
Встает тогда вопрос: что мне необходим указать в check_content чтобы один из вариантов текста('first', 'second') считались правильными в check_content и прокси сервер не менялся?
Заранее спасибо за Вашу помощь.

ПС по всей видимости, это непофиксенный баг, жаль, придется все проверять вручную.
 
Последнее редактирование:
@autoparts.db да, это баг и на данный момент он еще не исправлен.
Пока что можно вручную (т.е. реализовать цикл) перебирать попытки и проверять контент.
 
не работает https://a-parser.com/resources/20/ собственно проблема в:
Код:
this.query.add(link) // this.query.add(link, 1)
если ниже сделать this.logger.put(JSON.stringify(this.query));
тут же выдаст пустой объект, и не будет запущен второй парсер
 
не работает https://a-parser.com/resources/20/ собственно проблема в:
Код:
this.query.add(link) // this.query.add(link, 1)
если ниже сделать this.logger.put(JSON.stringify(this.query));
тут же выдаст пустой объект, и не будет запущен второй парсер
Здравствуйте. Указанный вам пресет работает.
Уточните пожалуйста как вы проверяете ?
 
ввожу любое слово в query, на выходе ожидаю $key - $link\n$text\n\n
все дефолтные настройки, только галку с прокси снимаю
бета/1.2.270
 
1) this.query.add() работает, это метод который ничего не должен возвращать, поэтому this.logger.put(JSON.stringify(this.query)); и возвращает пустой обьект
2)Проблема может быть в выдаваемой гуглом каптче. Решается она созданием пресета для SE::Google SE::Google, в котором кол-во попыток будет побольше( например 100 ), и указанием его в настройках JS::TextFromSE. Либо в Search engine выбрать яндекс и указать пресет для него.
 
оказалось в другом, что через Parser Test он просто не работает, а я изначально только через него проверяю.
 
this.query.add(link);
без maxLevel
а проверяем на set.lvl, получается по дефолту там 1 будет при добавлении, потому как в доках про это ничего нет.
в this.query.add нельзя указать уровень на который добавляется запрос. Можно указать максимальный уровень до которого будет добавляться. Добавляется на следующий уровень, то есть если сейчас set.level == 1, то запрос добавится на второй уровень.
set.level - это текущий уровень парсинга.
 
Последнее редактирование:
Здравствуйте, скажите, пожалуйста, есть ли какая-нибудь библиотека, чтобы можно было работать с DOM страницы? И возможно ли в парсере добавлять библиотеки?
Регулярки не подходят для большого количества моих задач.
 
Здравствуйте, скажите, пожалуйста, есть ли какая-нибудь библиотека, чтобы можно было работать с DOM страницы? И возможно ли в парсере добавлять библиотеки?
Регулярки не подходят для большого количества моих задач.

Добрый день, можно использовать npm-модули cheerio или jsdom, или любые другие npm-модули, которые могут решить Вашу задачу
Добавлять любой npm модуль можно, установив его в папку aparser/files
установить можно с помощью команды:
Код:
npm i jsdom
после установки модуль необходимо импортировать в Ваш js файл
Код:
const jsdom = require("jsdom");

Пример парсера, где используется npm модуль mysql
https://a-parser.com/resources/313/
Пример c cheer.io
https://a-parser.com/resources/296/
 
Добрый день, не могу найти закономерность с определением местоположения элемента капчи JS парсером. Взял парсер из примера https://a-parser.com/resources/257/.
Несколько раз читал статью и смотрел видео и вроде бы все просто. Код получился вот таким:

class Parser {
constructor() {
this.defaultConf = {
version: '0.1.35',
results: {
flat: [
['result', 'Captcha result'],
]
},
results_format: '$result\\n',
parsecodes: {
200: 1,
},
max_size: 200 * 1024,
Util_AntiGate_preset: 'default'
};
this.editableConf = [
['Util_AntiGate_preset', ['combobox', 'Util::AntiGate preset']]
];
}

*parse(set, results) {
if(this.conf.Util_AntiGate_preset == 'default') {
this.logger.put('Select antigate preset');
results.success = 0;
return results;
}

let response = yield this.request('GET', 'https://internet2.btk.gov.tr/sitesorgu/', {}, {
decode: 'auto-html',
});
if(!response.success) {
this.logger.put('Error open page');
results.success = 0;
return results;
}

let captchaUrl;
try {
captchaUrl = response.data.match(/<img id="security_code_image" src="([^"]+)/)[1];
} catch(e) {
this.logger.put('Captcha not found');
results.success = 0;
return results;
}

let captchaResp = yield this.captcha.recognize(this.conf.Util_AntiGate_preset, captchaUrl, {})
if(!captchaResp.answer) {
this.logger.put('Captcha recognize failed');
results.success = 0;
return results;
}

response = yield this.request('GET', 'https://internet2.btk.gov.tr/sitesorgu/', {
captcha: captchaResp.answer,
submit: 'Submit'
}, {
decode: 'auto-html',
});
if(!response.success) {
this.logger.put('Error checking captcha');
results.success = 0;
return results;
}

if(!/İlgili Kararlar/.test(response.data)) {
this.logger.put('Bad captcha');
yield this.captcha.reportBad(this.conf.Util_AntiGate_preset, captchaResp.id, {})
results.success = 0;
return results;
} else {
this.logger.put('Good captcha');
results.result = 'Success';
}

results.success = 1;
return results;
}
}

В итоге на сайт заходит - но капчу не видит :( img-тэг вписал, но есть догадка что проблема в регулярке.
 
Назад
Верх