Python变量在If语句中不起作用

Python变量在If语句中不起作用,python,pycharm,xlrd,python-3.7,Python,Pycharm,Xlrd,Python 3.7,我正在使用selenium从一个txt文件中遍历URL,并获取每个URL上列出的特定序列号。然后我想引用一个excel文件,找到序列号旁边的单元格并打印该值 我的问题是,当我将序列号存储在变量中时,它在if语句中不起作用。如果我用实际序列号替换变量,它将按预期运行。为什么存储的变量在我的代码中不起作用 这是我的预期代码,我没有收到任何输出: with open('Url.txt') as links: for line in links: time.sl

我正在使用selenium从一个txt文件中遍历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变量及其长度

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 十,

VS


输出为:G47

很可能这行中没有得到正确的值或根本没有值

serialnumber = sn.get_property('value')
您可以尝试打印此变量以查看得到的结果。 可能您正在查找的文本实际上不在id为device.name的元素的
'value'
属性中


此外,ID通常是唯一的,因此整个页面中应该只有一个ID。也许
'device.name'
实际上是一个类?没有页面源无法判断。请尝试打印变量:

print(serialnumber)

然后,检查它们是否相同


编辑:查看文档,您应该尝试使用
get\u attribute()
而不是
get\u property

用户DYZ在评论中回答了这个问题

sn.get_属性返回的值是字符串。在进行比较之前,必须将其转换为数字–DYZ

我只是用这个来转换它:

serial = int(serialnumber)

变量
serialnumber
的值是多少?您在使用前是否尝试打印它?在我的if语句中,
不起作用是什么意思?程序是否因错误而崩溃?还是什么都不打印?@DYZ-谢谢你的回复!我在编辑中打印了变量。希望这是有道理的!
sn.get\u属性
返回的值是字符串。必须先将其转换为数字,然后再执行comparison@DYZ-就是这样!谢谢。嗨,克拉戈斯!你似乎是个新手。请注意,调试指令本身并不能给出很好的答案。答案应该包含解决方案。你写的应该放在评论部分。我知道新用户有限制,您可能还不允许发表评论。@KlausD我实际上在编辑部分对我的答案提出了一个解决方案。@klagos嘿,谢谢您的回复。我做了一个编辑,希望它更有意义。谢谢回复。我在上面做了一个编辑来添加更多细节。
print(row_value[1])
serial = int(serialnumber)