【问题标题】:Handling website errors with selenium python使用 selenium python 处理网站错误
【发布时间】: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))

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    您可以使用tryexcept 来解决这个问题。首先,让我们定位一个等待时间为 10s 的元素,如果该元素没有出现,您可以刷新页面。这是代码的基本版本

    try:
      # wait for 10s to load element if it did not load then it will redirect to except block
      WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME,'text-color-main-secondary.text-sm.font-bold.text-left'.format(str(count + 1)))))
    except:
      driver.refresh()
      # locate the elemnt here again
    

    【讨论】:

    • 非常感谢您的回答!现在我看它,我自己也能想出来哈哈
    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2016-01-12
    • 2016-11-22
    相关资源
    最近更新 更多