Я хочу иметь возможность выбирать соответствующий пол на основе списка

#python #selenium

#python #селен

Вопрос:

Я хочу, чтобы selenium выбирал соответствующий пол на основе строки, которая у меня есть в массиве. Например, если поле ввода содержит одно из женских имен, selenium выберет женский пол,

 createProfile_FirstName = driver.find_element_by_id('firstname')

def random_profile():

    MaleFname = ['Liam', 'Noah', 'Oliver', 'William', 'Matthew',
             'John', 'Adam', 'Richard', 'Robert', 'Michael']

    FemaleFname = ['Olivia', 'Emma', 'Ava', 'Sophia', 'Isabella', 'Charlotte',
                   'Mia', 'Harper', 'Evelyn', 'Ella', 'Sofia', 'Mila', 'Aria']

    Fname = MaleFname, FemaleFname
    createProfile_FirstName.send_keys(f'{random.choice(random.choices(Fname, weights=map(len, Fname))[0])}')

    # Picking a Gender corresponding to the name inputted by random module
    if any(MaleFname) in createProfile_FirstName:
        selectMale = driver.find_element_by_id('gender1')
        selectMale.click()

    elif any(FemaleFname) in createProfile_FirstName:
        selectMale = driver.find_element_by_id('gender2')
        selectMale.click()
 

Комментарии:

1. У вас он перевернут. Вы должны проверять if createProfile_FirstName in MaleFname , не находится ли список в строке.

2. Может быть, вам нужно if any(name in createProfile_FirstName for name in MaleFname): разрешить, чтобы элемент MaleFname был подстрокой первого заданного имени? Но если вы ожидаете точных совпадений, я согласен с @Rorschach

Ответ №1:

Итак, я только что внес несколько изменений в свой код. И это работает!! Я создал две функции male_profile и female_profile, и у меня есть метод случайного выбора, между которыми нужно запускать. Работает отлично!

 # (Creating Profile) First Name
createProfile_FirstName = driver.find_element_by_id('firstname')
def male_profile():
    maleFname = ['Liam', 'Noah', 'Oliver', 'William', 'Matthew',
             'John', 'Adam', 'Richard', 'Robert', 'Michael',
             'Mark', 'Joseph', 'Thomas', 'Charles', 'Donald',
             'Jackson', 'Jack', 'Levi', 'David', 'Sam', 'Samuel',
             'Mateo', 'Sebastian', 'Logan', 'Jacob', 'Henry', 'Ben',
             'Hudson', 'Adrian', 'Colton', 'Nolan', 'Maverick', 'Aaron',
             'Caleb', 'Andrew', 'Ryan', 'Cooper', 'Chase', 'Cole', 'Silas',
             'Jason', 'Emmentt', 'Bryson', 'Vincent', 'Luis', 'Cody', 'Ali']
    createProfile_FirstName.send_keys(random.choice(maleFname))

    selectMale = driver.find_element_by_id('gender1')
    selectMale.click()

def female_profile():
    femaleFname = ['Olivia', 'Emma', 'Ava', 'Sophia', 'Isabella', 'Charlotte',
                   'Mia', 'Harper', 'Evelyn', 'Ella', 'Sofia', 'Mila', 'Aria',
                   'Maria', 'Natalia', 'Lydia', 'Julia', 'Ruth', 'Lola', 'Izabella',
                   'Nina', 'Margot', 'Gia', 'Nadia', 'Skyla', 'Julie', 'Irene', 'Greta',
                   'Savanna', 'Aubrie', 'Ashlynn', 'Sasha', 'Alexia', 'Lara', 'Tiffany']
    createProfile_FirstName.send_keys(random.choice(femaleFname))

    selectFemale = driver.find_element_by_id('gender2')
    selectFemale.click()

profilePicker = [male_profile, female_profile]
for i in range(1):
    random.choice(profilePicker)()
 

Комментарии:

1. Поскольку вы не используете переменную selectMale , эти две строки можно сократить до driver.find_element_by_id('gender1').click() . То же самое для selectFemale . Мое общее правило — не создавайте переменную, если вы не собираетесь ее использовать.