Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Как передать константы между функциями (https://javascript.ru/forum/node-js-io-js/79469-kak-peredat-konstanty-mezhdu-funkciyami.html)

daniil242141 13.02.2020 09:50

Как передать константы между функциями
 
Есть код
JavascriptВыделить код

const puppeteer = require('puppeteer');
Main();
async function Main(){
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
 
Table();
}
 
async function Table(){
await page.goto('file:///C:/Users/Daniil/Desktop/LF%20&%20CSM%20-%20TradeBack.html');
await page.waitFor(1000);
}

Нужно чтобы функция Table могла взаимодействовать с браузером открым в Main, но не могу понять как это сделать. Буду благодарен за подсказку!

Nexus 13.02.2020 13:53

Может так?
async function Main() {
    const browser = await puppeteer.launch({headless: false});

    Table(browser);
}

async function Table(browser) {
    const page = await browser.newPage();
    
    await page.goto('file:///C:/Users/Daniil/Desktop/LF%20&%20CSM%20-%20TradeBack.html');
    await page.waitFor(1000);
}

daniil242141 13.02.2020 17:07

Да, сработало! Спасибо большое!

daniil242141 13.02.2020 17:38

А если мне нужно подключить несколько функций, то вот так?
Main();
async function Main() {
    const browser = await puppeteer.launch({headless: false});

    Autorizacia(browser);
    Filtr(browser);
    
}

async function Autorizacia(browser) {  
    const page = await browser.newPage();
    
    await page.goto('https://');
    await page.waitFor(15000);
div.auth_button_h3');
}

async function Filtr(browser){
    await page.waitFor(5000);
    await page.waitFor('#user-nickname');
    console.log('Авторизация прошла успешно, устанавливаем фильтры')
}

Я все верно понял? Почему-то код не хочет запускать 2 функцию.. Извините, если задаю глупые вопросы..

daniil242141 13.02.2020 17:42

Цитата:

Сообщение от daniil242141 (Сообщение 520081)
А если мне нужно подключить несколько функций, то вот так?
Main();
async function Main() {
    const browser = await puppeteer.launch({headless: false});

    Autorizacia(browser);
    Filtr(browser);
    
}

async function Autorizacia(browser) {  
    const page = await browser.newPage();
    
    await page.goto('https://');
    await page.waitFor(15000);
div.auth_button_h3');
}

async function Filtr(browser){
    await page.waitFor(5000);
    await page.waitFor('#user-nickname');
    console.log('Авторизация прошла успешно, устанавливаем фильтры')
}

Я все верно понял? Почему-то код не хочет запускать 2 функцию.. Извините, если задаю глупые вопросы..

А точнее эти функции запускаются асинхронно, насколько я знаю. Но я же для этого их и вызываю, чтобы они запускались линейно..

daniil242141 13.02.2020 17:45

Кажется понял, моя ошибка заключается в том, что нужно вызывать следующую функцию в конце первой, спасибо)

daniil242141 13.02.2020 17:47

Но теперь проблема заключается в том, что "browser" передается только на первую функцию, а на вторую нет..

SuperZen 14.02.2020 11:46

ну передаешь ты browser, а используешь page, не? )

Nexus 14.02.2020 13:08

Для каждого метода нужно открывать свою вкладку, или открывать одну вкладку в функции Main и передавать её экземпляр в аргументах другим функциям.

Первый вариант с последовательным вызовом функций в примере ниже:
Main();
async function Main() {
    const browser = await puppeteer.launch({headless: false});

    await Autorizacia(browser);
    await Filtr(browser);
}

async function Autorizacia(browser) {  
    const page = await browser.newPage();
    
    await page.goto('https://');
    await page.waitFor(15000);
    // div.auth_button_h3'); - syntax error
}

async function Filtr(browser){
    const page = await browser.newPage();

    await page.waitFor(5000);
    await page.waitFor('#user-nickname');

    console.log('Авторизация прошла успешно, устанавливаем фильтры')
}


Часовой пояс GMT +3, время: 06:46.