Я использую 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
Скорее всего, вы не получаете правильное значение или вообще не имеете значения в этой строке
serialnumber = sn.get_property('value')
Вы можете попробовать распечатать эту переменную, чтобы узнать, что вы получаете. Возможно, тексты, которые вы ищете, на самом деле не находятся в 'value'
элементов с идентификатором 'device.name'
.
Кроме того, идентификаторы обычно уникальны, поэтому на всей странице должно быть только одно. Может быть, 'device.name'
на самом деле является классом? Не могу сказать без источника страницы.
Попробуйте распечатать переменные:
print(serialnumber)
а также
print(row_value[1])
то проверьте, совпадают ли они.
Изменение: если посмотреть на документацию, вы должны попытаться использовать get_attribute()
вместо get_property
Пользователь DYZ ответил на эту проблему в комментарии.
Значение, возвращаемое sn.get_property, является строкой. Вы должны преобразовать его в число перед сравнением - DYZ
Я просто использовал это для его преобразования:
serial = int(serialnumber)
serialnumber
? Вы пытались распечатать его перед использованием?it is not working in my if statement
? Программа вылетает с ошибкой? Или просто ничего не распечатывать?