【发布时间】:2021-10-14 20:27:41
【问题描述】:
我正在使用 selenium 抓取网站并发送警报,如果发生特定情况。一般来说,我的代码运行良好,但有时网站无法加载元素或网站出现错误消息,例如:“对不起,出了点问题!请刷新页面并重试!”两次,我的脚本都等到元素被加载,但它们没有,然后我的程序什么也不做。我通常使用 requests 和 Beautifulsoup 进行网页抓取,所以我对 selenium 不太熟悉,我不确定如何处理这些错误,因为我的代码不会发送错误消息,只是等待,直到元素加载,这将可能永远不会发生。如果我手动刷新页面,程序将继续工作。我的想法是这样的:如果加载时间超过 10 秒,请刷新页面并重试。 我的代码看起来有点像这样:
def get_data():
data_list = []
while len(data_list) < 3:
try:
data = driver.find_elements_by_class_name('text-color-main-secondary.text-sm.font-bold.text-left')
count = len(data)
data_list.append(data)
driver.implicitly_wait(2)
time.sleep(.05)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.CLASS_NAME,
'text-color-main-secondary.text-sm.font-bold.text-left'.format(
str(
count + 1)))))
except TimeoutException:
break
text = []
elements = []
for i in range(len(data_list)):
for j in range(len(data_list[i])):
t = data_list[i][j].text
elements.append(data_list[i][j])
for word in t.split():
if '#' in word:
text.append(word)
return text, elements
option = webdriver.ChromeOptions()
option.add_extension('')
path = ''
driver = webdriver.Chrome(executable_path=path, options=option)
driver.get('')
login(passphrase)
driver.switch_to.window(driver.window_handles[0])
while True:
try:
infos, elements = get_data()
data, message = check_data(infos, elements)
if data:
send_alert(message)
time.sleep(600)
driver.refresh()
except Exception as e:
exception_type, exception_object, exception_traceback = sys.exc_info()
line_number = exception_traceback.tb_lineno
print("an exception occured - {}".format(e) + " in line: " + str(line_number))
【问题讨论】: