我正在用 Python 编写一个脚本来在社交网络上进行烟雾测试,它实现了一个帖子提要。
我写了一个方法来查找最上面的帖子,然后返回它(它是“媒体”类)。你会看到有一些 time.sleep() 和 refresh() 调用,那是因为我们使用的服务器很糟糕,至少可以说,加载经常失败,只渲染部分内容,需要刷新.
这就是问题所在:当且仅当调用 br.refresh() 时,返回的对象是 NoneType。如果页面加载正确,并且没有调用 refresh(),则返回的对象是正确的。
有谁知道为什么会发生这种情况?我尝试在不使用异常的情况下实现该方法(以防这以某种方式破坏了返回)但没有任何成功。
PS:奇怪的是,如果我不等待调用 br.refresh() ,而是手动去按“驱动”浏览器上的刷新按钮,对象就会完美返回。
这是代码:
def getLastPost (br, count = 0):
try:
elapsed = 0
while(br.find_elements_by_class_name("media") == []) and elapsed < 15:
if elapsed % 5 == 0:
log("Waiting...","w")
time.sleep(0.5)
elapsed += 0.5
if(br.find_elements_by_class_name("media") == []):
raise NoSuchElementException
return br.find_elements_by_class_name("media")[0]
except NoSuchElementException:
if(count >= 5):
raise Exception("Element not found after 5 page reloads.")
log("Element not loaded! Retrying.","w")
count += 1
br.refresh()
time.sleep(count) # Wait a bit more each time.
getLastPost(br, count)
以及尝试读取返回的对象时出现的错误:
Traceback (most recent call last):
File "Smoke.py", line 37, in <module>
assert ("MESSAGE") in getLastPost(br).text
AttributeError: 'NoneType' object has no attribute 'text'