Back to Repository

SSR

0 upvotes
By noamk@lognet-systems.com
Manual (context menu)

Description

SSR

Match Pattern

<all_urls>

Script Code

(function() {
    const firstNamesAlex = ["Noam", "TEST", "NoamTest", "NAME"]
    const lastNamesAlex = ["Kore", "LastName", "Koretski"]
    function randomDate(startStr, endStr) {
        const startDate = new Date(startStr);
        const endDate = new Date(endStr);

        // If dates are invalid, set default values
        if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
            return '1990-01-01';
            // Default date
        }

        const randomTime = startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime());
        const date = new Date(randomTime);

        const yyyy = date.getFullYear();
        let mm = date.getMonth() + 1;
        // Months start at 0!
        let dd = date.getDate();

        if (dd < 10)
            dd = '0' + dd;
        if (mm < 10)
            mm = '0' + mm;

        return `${yyyy}-${mm}-${dd}`;
    }

    // Function to generate a random 9-digit number as a string
    function randomNineDigitNumber() {
        return Math.floor(100000000 + Math.random() * 900000000).toString();
    }

    // Function to pick a random element from an array
    function getRandomElement(arr) {
        return arr[Math.floor(Math.random() * arr.length)];
    }

    // Get today's date
    const today = new Date();

    // Function to fill the passenger forms
    function fillForms() {
        // Get all passenger forms
        const passengerForms = document.querySelectorAll('.personal-details-form');

        passengerForms.forEach(function(form, index) {
            const titleElement = form.querySelector('.personal-details-form__title');
            let passengerType = 'adult';

            if (titleElement) {
                const titleText = titleElement.textContent;
                if (titleText.includes('ילד') || titleText.includes('ילדה')) {
                    passengerType = 'child';
                } else if (titleText.includes('תינוק') || titleText.includes('תינוקת')) {
                    passengerType = 'infant';
                } else {
                    passengerType = 'adult';
                }
            }
            const nameInput = form.querySelector('input[name$=".name"]');
            if (!nameInput) {
                return;
            }
            const nameAttr = nameInput.getAttribute('name');
            const namePrefix = nameAttr.substring(0, nameAttr.indexOf('.'));
            const firstName = getRandomElement(firstNamesAlex);
            const randomLetters = Array.from({
                length: 3
            }, () => String.fromCharCode(97 + Math.floor(Math.random() * 26))).join('')
            const lastName = getRandomElement(lastNamesAlex) + randomLetters;
            const dobInput = form.querySelector(`input[name="${namePrefix}.dateOfBirth"]`);
            let dobMin, dobMax;
            if (passengerType === 'adult') {
                const maxAdultDOB = new Date(today.getFullYear() - 18,today.getMonth(),today.getDate());
                dobMin = dobInput.getAttribute('min') || '1920-01-01';
                dobMax = maxAdultDOB.toISOString().split('T')[0];
            } else if (passengerType === 'child') {
                const minChildDOB = new Date(today.getFullYear() - 11,today.getMonth(),today.getDate());
                const maxChildDOB = new Date(today.getFullYear() - 3,today.getMonth(),today.getDate());
                dobMin = minChildDOB.toISOString().split('T')[0];
                dobMax = maxChildDOB.toISOString().split('T')[0];
            } else if (passengerType === 'infant') {
                const minInfantDOB = new Date(today.getFullYear() - 2,today.getMonth(),today.getDate());
                const maxInfantDOB = today;
                dobMin = minInfantDOB.toISOString().split('T')[0];
                dobMax = maxInfantDOB.toISOString().split('T')[0];
            } else {
                dobMin = dobInput.getAttribute('min') || '1920-01-01';
                dobMax = dobInput.getAttribute('max') || '2022-12-31';
            }
            const dateOfBirth = randomDate(dobMin, dobMax);
            const passportExpInput = form.querySelector(`input[name="${namePrefix}.passportExpirationDate"]`);
            let passportExpMinAttr = passportExpInput.getAttribute('min') || '2024-01-01';
            let passportExpMin = new Date(Math.max(new Date(passportExpMinAttr), new Date('2026-01-01')));
            let passportExpMaxAttr = passportExpInput.getAttribute('max') || '2100-12-31';
            let passportExpMax = new Date(passportExpMaxAttr);
            const passportExpirationDate = randomDate(passportExpMin.toISOString().split('T')[0], passportExpMax.toISOString().split('T')[0]);
            const passportNumber = randomNineDigitNumber();
            const telephone = '+972501234567';
            const additionalTelephone = '+972501234567';
            const email = `test${index + 1}@example.com`;
            const gender = index % 2 === 0 ? 'male' : 'female';
            const fillField = (selector, value) => {
                const field = form.querySelector(selector);
                if (field) {
                    const nativeInputValueSetter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(field), 'value').set;
                    nativeInputValueSetter.call(field, value);
                    const event = new Event('input',{
                        bubbles: true
                    });
                    field.dispatchEvent(event);
                }
            };
            fillField(`input[name="${namePrefix}.name"]`, firstName);
            fillField(`input[name="${namePrefix}.lastName"]`, lastName);
            fillField(`input[name="${namePrefix}.dateOfBirth"]`, dateOfBirth);
            fillField(`input[name="${namePrefix}.passport"]`, passportNumber);
            fillField(`input[name="${namePrefix}.passportExpirationDate"]`, passportExpirationDate);
            fillField(`input[name="${namePrefix}.telephone"]`, telephone);
            fillField(`input[name="${namePrefix}.additionalTelephone"]`, additionalTelephone);
            fillField(`input[name="${namePrefix}.email"]`, email);
            fillField(`input[name="${namePrefix}.emailConfirmation"]`, email);
            fillField(`input[name="${namePrefix}.companyName"]`, 'TestCompany');
            const setCountryCode = (selector) => {
                const countryField = form.querySelector(selector);
                if (countryField) {
                    countryField.value = 'IL';
                    // 'IL' for Israel
                    const event = new Event('change',{
                        bubbles: true
                    });
                    countryField.dispatchEvent(event);
                }
            };

            setCountryCode(`select[name="${namePrefix}.telephoneCountry"]`);
            setCountryCode(`select[name="${namePrefix}.additionalTelephoneCountry"]`);

            // Simulate click on gender radio button
            const genderField = form.querySelector(`input[name="${namePrefix}.gender"][value="${gender}"]`);
            if (genderField) {
                genderField.click();
            }
        });
    }

    document.querySelectorAll('.terms-section input').forEach(cb => cb.click());

    // Run the script 5 times to ensure all forms are filled
    for (let i = 0; i < 5; i++) {
        fillForms();
    }
}
)();
Install requires the InjectJS Chrome extension. Scripts run only on sites matching the pattern above. Review code before installing any community script.