Переменная Python не работает в операторе If

1

Я использую selenium для прокрутки URL-адреса из txt файла и захвата определенного серийного номера, указанного в каждом URL-адресе. Затем я хочу обратиться к файлу excel и найти ячейку рядом с серийным номером и напечатать это значение.

Моя проблема в том, что когда я храню серийный номер в переменной, он не работает в моей инструкции if. Если я заменю переменную фактическим серийным номером, она будет работать по назначению. Почему в моем коде не работает хранимая переменная?

Вот мой предназначенный код, где я не получаю выход:

 with open('Url.txt') as links:
        for line in links:
            time.sleep(3)
            driver.get(line)
            editpage = driver.find_elements_by_link_text('Edit this device')
            for page in editpage:
                time.sleep(1)
                editurl = page.get_attribute('href')
                driver.get(editurl)
                Devicesn = driver.find_elements_by_id('device.name')
                for sn in Devicesn:
                    serialnumber = sn.get_property('value')
                    wb = xlrd.open_workbook('C:\doc.xls')
                    for sheet in wb.sheets():
                        for row_num in range(sheet.nrows):
                            row_value = sheet.row_values(row_num)
                            if row_value[1] == serialnumber:
                                print(row_value[0])

Если я заменю серийный номер на число, я получаю значение ячейки, которое я ищу:

    with open('Url.txt') as links:
        for line in links:
            time.sleep(3)
            driver.get(line)
            editpage = driver.find_elements_by_link_text('Edit this device')
            for page in editpage:
                time.sleep(1)
                editurl = page.get_attribute('href')
                driver.get(editurl)
                Devicesn = driver.find_elements_by_id('device.name')
                for sn in Devicesn:
                    serialnumber = sn.get_property('value')
                    wb = xlrd.open_workbook('C:\doc.xls')
                    for sheet in wb.sheets():
                        for row_num in range(sheet.nrows):
                            row_value = sheet.row_values(row_num)
                            if row_value[1] == 6216295237: #replaced serialnumber
                                print(row_value[0])

Это дает мне мое предназначение. Почему моя переменная serialnumber не работает? Спасибо!

EDIT: Спасибо всем за ответы. Надеюсь, что это поможет, я напечатал переменную serialnumber и длину.

serialnumber = sn.get_property('value')
wb = xlrd.open_workbook('C:\doc.xls')
for sheet in wb.sheets():
    for row_num in range(sheet.nrows):
        row_value = sheet.row_values(row_num)
        print(serialnumber)
        print(len(serialnumber))
        time.sleep(60)
        if row_value[1] == serialnumber:
            print(row_value[0])

Выход: 6216295237 10

В.С.

#serialnumber = sn.get_property('value')
wb = xlrd.open_workbook('C:\doc.xls')
for sheet in wb.sheets():
    for row_num in range(sheet.nrows):
        row_value = sheet.row_values(row_num)
        if row_value[1] == 6216295237:
            print(row_value[0])

Выход: G47

  • 0
    Каково значение переменной serialnumber ? Вы пытались распечатать его перед использованием?
  • 0
    Что вы подразумеваете под it is not working in my if statement ? Программа вылетает с ошибкой? Или просто ничего не распечатывать?
Показать ещё 4 комментария
Теги:
python-3.7
pycharm
xlrd

3 ответа

1

Скорее всего, вы не получаете правильное значение или вообще не имеете значения в этой строке

serialnumber = sn.get_property('value')

Вы можете попробовать распечатать эту переменную, чтобы узнать, что вы получаете. Возможно, тексты, которые вы ищете, на самом деле не находятся в 'value' элементов с идентификатором 'device.name'.

Кроме того, идентификаторы обычно уникальны, поэтому на всей странице должно быть только одно. Может быть, 'device.name' на самом деле является классом? Не могу сказать без источника страницы.

  • 0
    Спасибо за ответ. Я внес изменения выше, чтобы добавить больше деталей.
1

Попробуйте распечатать переменные:

print(serialnumber)

а также

print(row_value[1])

то проверьте, совпадают ли они.

Изменение: если посмотреть на документацию, вы должны попытаться использовать get_attribute() вместо get_property

  • 0
    Привет @klagos! Вы, кажется, новичок в SO. Обратите внимание, что инструкция по отладке сама по себе не дает хорошего ответа. Ответ должен содержать решение. То, что вы написали, на самом деле должно быть в разделе комментариев. Я знаю, что у новых пользователей есть ограничения, и комментирование может быть для вас еще не разрешено.
  • 0
    @KlausD Я на самом деле нашел решение в своем ответе в части редактирования.
Показать ещё 1 комментарий
0

Пользователь DYZ ответил на эту проблему в комментарии.

Значение, возвращаемое sn.get_property, является строкой. Вы должны преобразовать его в число перед сравнением - DYZ

Я просто использовал это для его преобразования:

serial = int(serialnumber)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню