Python变量在If语句中不起作用
我正在使用selenium从一个txt文件中遍历URL,并获取每个URL上列出的特定序列号。然后我想引用一个excel文件,找到序列号旁边的单元格并打印该值 我的问题是,当我将序列号存储在变量中时,它在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
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)