我一直试图将以下内容计算两天;希望有人可以告诉我我做错了什么
我创建了一个函数,我希望在列表中遍历列表条目的次数
出于某种原因,我的FOR LOOP在第一次循环后失败了。我已经检查了创建的列表(“链接”)至少有2个条目,通过在列表上放置一个打印LEN,所以我不能为我的生活解决为什么只有一次通过循环退出
我添加了一个PRINT(“FOR LOOP STARTS”),所以我可以跟踪循环正在做什么,实际上在它失败之前它会再次显示文本但它从未显示下一个PRINT命令,它向我建议它在“VALUE = link.text”部分失败,但我再也不明白为什么
任何帮助都会非常感激
def MULTIHIT():
try:
links = driver.find_elements_by_xpath(".//*[contains(@href, 'MyData=')]")
for link in links:
print("FOR LOOP STARTS")
value = link.text
print(value)
driver.get('www.somewebsite.com')
driver.find_element_by_name("searchValue").click()
driver.find_element_by_name("searchValue").send_keys(value)
driver.find_element_by_xpath(".//input[@name='sub']").click()
#collect a value from an excel file and remove spaces
cellvalue = str(sheet.cell(i, 1).value)
cellvalue2 = cellvalue.replace(" ", "")
#collect a value from a webpage and remove spaces
checkoff = driver.find_element_by_id("somedata")
checkoff2 = checkoff.text.replace(" ", "")
#if two values match, call another function
if checkoff2 == cellvalue2:
MAS()
except:
print("something went wrong")
编辑:
根据给出的建议,我以不隐藏错误的方式使用了我的TRY和EXCEPT。发布的错误是:
“消息:陈旧元素引用:元素未附加到页面文档.....”
我已经用Google搜索了这个,因为我理解错误被抛出,因为我已经离开了曾经存在元素的页面。但现在我想知道如何/为什么这可能.....我的印象是links = driver.find_elements_by_xpath(".//*[contains(@href, 'MyData=')]")
创建一个名为LINKS的列表,并且FOR循环只是迭代一个静态和封闭的列表。
情况不是这样吗?
编辑2:
所以我认为find_elements
创建的列表实际上只是指向driver
以再次获取该元素。所以我做的是这个:
def MULTIHIT():
try:
links = driver.find_elements_by_xpath(".//*[contains(@href, 'MyData=')]")
links2 = []
for link in links:
links2.append(link.text)
for link in links:
print("FOR LOOP STARTS")
value = link
print(value)
driver.get('www.somewebsite.com')
driver.find_element_by_name("searchValue").click()
driver.find_element_by_name("searchValue").send_keys(value)
driver.find_element_by_xpath(".//input[@name='sub']").click()
#collect a value from an excel file and remove spaces
cellvalue = str(sheet.cell(i, 1).value)
cellvalue2 = cellvalue.replace(" ", "")
#collect a value from a webpage and remove spaces
checkoff = driver.find_element_by_id("somedata")
checkoff2 = checkoff.text.replace(" ", "")
#if two values match, call another function
if checkoff2 == cellvalue2:
MAS()
except:
print("something went wrong")
这是一个非常“丑陋”的解决方案(创建多个列表),但它有效。如果有人碰巧有更多的pythonic方式实现同样的目标,我仍然有兴趣知道
感谢您的帮助