【问题标题】:Python Variable Not Working In If StatementPython 变量在 If 语句中不起作用
【发布时间】:2019-03-16 01:32:50
【问题描述】:

我正在使用 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])

如果我用数字替换序列号,我会得到我正在寻找的单元格值:

    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 = 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

【问题讨论】:

  • 变量serialnumber的值是多少?使用前有没有试过打印?
  • it is not working in my if statement 是什么意思?程序是否因错误而崩溃?或者只是不打印任何东西?
  • @DYZ - 感谢您的回复!我在编辑中打印了变量。希望这是有道理的!
  • sn.get_property返回的值是一个字符串。在比较之前必须将其转换为数字
  • @DYZ - 就是这样!谢谢。

标签: python pycharm xlrd python-3.7


【解决方案1】:

您更有可能在这一行中没有得到正确的值或根本没有值

serialnumber = sn.get_property('value')

您可以尝试打印此变量以查看您得到的结果。 也许您要查找的文本实际上不在 ID 为 'device.name' 的元素的 'value' 属性中。

除此之外,ID 通常是唯一的,因此整个页面中应该只有一个。也许'device.name' 实际上是一个类?没有页面来源无法判断。

【讨论】:

  • 感谢您的回复。我在上面进行了编辑以添加更多细节。
【解决方案2】:

尝试打印你的变量:

print(serialnumber)

print(row_value[1])

然后,检查它们是否相同。

编辑:查看文档,您应该尝试使用get_attribute() 而不是get_property

【讨论】:

  • 嗨@klagos!您似乎对 SO 很陌生。请注意,调试指令本身并不能做出很好的回答。答案应该包含解决方案。您写的内容实际上应该进入评论部分。我知道新用户有限制,您可能还不能发表评论。
  • @KlausD 我实际上在编辑部分对我的答案提出了解决方案。
  • @klagos 嘿,谢谢您的回复。我做了一个编辑,希望它更有意义。
【解决方案3】:

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

sn.get_property 返回的值是一个字符串。在比较之前必须将其转换为数字 - DYZ

我只是用它来转换它:

serial = int(serialnumber)

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    相关资源
    最近更新 更多