这是我的密码。在Try中,我正在检查特定的文本是否出现在加载中,如果是这样的话,将进一步处理。如果我正确理解,我的代码在每次加载时显式地等待10秒,然后等待另一个15,直到满足条件?
问题是,在页面内容加载失败并抛出异常后,如何查看它?我想知道为什么会发生这种情况,页面上有什么,或者遗漏了什么。现在,我无条件地重新加载相同的页面,但是由于它是重新加载的,所以抛出异常的不是同一个页面。有办法从try查看原始页面吗?
时间循环只是为了检查它是如何进行的。
我还试图将失败的url添加到我迭代过的列表中。我认为这是一种糟糕的做法。但是,它能造成什么危害,最好的解决办法是什么?
driver = webdriver.PhantomJS(executable_path=r'C:\Python3\selenium\webdriver\phantomjs-2.1.1-windows\bin\phantomjs.exe',service_log_path=os.path.devnull)
while count < 20:
for line in q:
driver.get(line)
try:
WebDriverWait(driver, 40).until(EC.text_to_be_present_in_element((By.ID, 'searchProgressText'), 'Search complete'))
text=driver.find_element_by_class_name("sortbar").text.encode().decode('ascii','ignore')
start = text.find('Cheapest')
stop = text.find('Best')
date = (line[line.find('SDP0')+5:line.find('&AD')].split('&'))
date = date[0]+ ' - ' + date[3][5:]
dest = (' - ').join(line[line.find('SO0')+4:line.find('&SDP0')].split('&SD0='))
print()
print('count=', count)
print(line)
print(date)
print(dest)
print(text[start:stop])
count+=1
except:
print()
print('******')
print('******')
print("Failure", fcount, line)
fcount+=1
text=driver.find_element_by_id("searchProgressText").text.encode().decode('ascii','ignore')
print(text)
print('******')
print('******')
print()
time.sleep(2)
driver.close()这个特定的行需要太长时间才能加载。从1.5秒到7秒。大多数情况下都是3秒。
driver.get(line)这样可以吗?我如何影响装载时间?
发布于 2017-04-17 00:58:43
在页面内容加载失败并抛出异常后,如何查看它?
通过“查看页面内容”,我假设您要么是保存屏幕截图,要么是保存页面源代码,因此我将同时显示这两个内容。
但基本上,你抓住了例外,在那里做了些什么。
考虑下面的例子。它将等待15秒才能达到预期的条件。所以它要么返回WebElement的一个实例,要么抛出一个TimeoutException。在继续之前,你可以抓住异常,做你想做的任何事情。此示例将打印异常详细信息,打印当前页源,并保存屏幕快照。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.PhantomJS()
driver.get(some_url)
try:
wait = WebDriverWait(driver, 15)
condition = EC.element_to_be_clickable((By.ID, 'someid'))
element = wait.until(condition)
except TimeoutException as e:
print(e)
print(driver.page_source)
driver.save_screenshot('screen.png')我给出了一个简化的示例,因为您的代码包含许多其他问题。最好从基础开始。
发布于 2017-04-16 21:32:47
如果我正确理解,我的代码在每次加载时显式地等待10秒,然后等待另一个15,直到满足条件?
这并不完全正确。隐式设置在driver上,并应用于该driver实例的生命周期。在你设置它的时候,它实际上什么也不做。您可以阅读医生们来了解更多内容,但是每次尝试查找元素时,它基本上只能等待10s,而且它不是立即可用的。
您使用的是隐式和显式等待,每个医生们都不应该这样做。
警告:不要混合隐式和显式等待。这样做会导致不可预测的等待时间。
您应该删除隐式等待,并根据需要只使用显式等待(WebDriverWait)。
若要在页面内容加载失败后查看其内容,except中的代码是在未找到预期元素时运行的。您需要将您的代码放在页面上,以找到页面上的内容。你没有详细说明你想要什么,所以你可以拍摄一个截图,把某个元素中的HTML转储到日志中,等等,这取决于你想要的是什么。
https://stackoverflow.com/questions/43441792
复制相似问题