Переменная Python не работает в операторе If - PullRequest
0 голосов
/ 11 октября 2018

Я использую селен для циклического прохождения URL-адресов из текстового файла и получения определенного серийного номера, который указан в каждом 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])

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

    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 и ее длину.

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

VS

#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

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

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

print(serialnumber)

и

print(row_value[1])

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

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

0 голосов
/ 12 октября 2018

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

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

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

serial = int(serialnumber)
0 голосов
/ 11 октября 2018

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

serialnumber = sn.get_property('value')

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

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

...