【问题标题】:How to restart try loop if exception occurs如果发生异常,如何重新启动尝试循环
【发布时间】:2023-03-24 18:40:02
【问题描述】:

我正在编写一个网络爬虫,它使用现有电子表格中的数据从网站中提取数据。它使用特定列中的代码(即引用产品)来搜索站点。但是,当搜索一种产品时,会显示多个,只有一个是正确匹配的。我创建了一个可以搜索正确代码并通过find_element_by_xpath 选择产品的系统,但它不考虑多个页面。我的目标是(在找不到代码的情况下)移动到下一页并搜索相同的代码而不移动到下一个 excel 行,当到达最后一页时停止。我已经找到了一段可以移至下一页的代码:

try:
    _driver.find_element_by_class_name("next").click()
    print("Navigating to Next Page")
except TimeoutException as e:
    print("Final Page")
    break

但是,我不确定在不破坏代码或逐行向下移动的情况下,我将在何处/如何实现这一点。 这是到目前为止我的代码如何工作的 sn-p(显然是简化的)

for i in data.index: #(_data is spreadsheet column)
    try:
        # locate product code
        # copy product link
        # navigate to link

        try:
        # wait for site to load 

        # Copy data to Spreadsheet 

        except TimeoutException:
        # Skip if site takes too long

     except Exception as e:
     # Catch any possible exceptions and continues loop (normally when product cannot be found)

任何帮助都将不胜感激,无论是如何实现上面的代码 sn-p,或者是从一个页面移动到另一个页面的更好方法。如果需要,我可以提供网站链接或我的代码的 sn-ps 链接:)

【问题讨论】:

  • 将 try/except 调用放在一个函数中,然后在需要时调用该函数。
  • 您可以使用布尔变量,并在 try 块成功时将该布尔变量更改为 true。然后将所有的 try 和 except 放在一个 while 循环中,检查这个布尔变量是否仍然为 false,所以它会执行 try 和 catch,直到 try 块成功。
  • @Wahalez 哪个 try 块?然后当你在一个while循环中说所有的尝试和接受时,我假设你的意思是下一页sn-p。
  • @Wahalez 以及 try/except while 循环的确切位置?因为我需要它运行而不增加 _data.index 中的 i
  • @DanCurry 尝试/排除下一页功能?这可能行得通,我试一试

标签: python selenium loops try-catch


【解决方案1】:

Python 程序一旦遇到错误就会终止。在 Python 中,错误可以是语法错误或异常。 try-except 代码让您可以在不终止程序的情况下测试代码并捕获可能发生的异常。

对于您的问题,您可能希望使用recursion functions 来浏览页面。

你可以试试这样的:

def rec(site, product):
    if(final-page)
        return exception_not_found

    try:
        # locate product code

        try:
        # wait for site to load 
        # Copy data to Spreadsheet 
        if(found_product)
            return #found, break

        except TimeoutException:
        return # Skip if site takes too long
    except Exception as e:
        return # Skip if fails ? 

    if(we_did_not_find_product)
        # copy product link
        # navigate to link
        #navigate to next site
        rec(next_site, product)


for i in data.index: #(_data is spreadsheet column)
    rec(init_side, i)

对于电子表格中的每一行,我们进入初始页面,寻找产品,如果没有找到,则进入下一页,直到找到产品或到达最后一页。情况下进入下一行:如果出现异常,找到产品,进入下一页。

【讨论】:

  • 大家好,谢谢大家的建议,我最终将代码检查器和页面点击器存储为两个独立的函数,并使用它们相互调用。它似乎可以正常工作,因为它遍历了我提供的所有数据,没有错误
【解决方案2】:

我是怎么做的(将页面移动器和代码检查器存储为函数并使用它们相互调用):

def page_mover():
    try:
        # Click Next page
        page_link()
    except Exception:
        print("Last page reached")

def page_link():
    try:
        # Wait for page to load
        # Get link using product code
        # Go to link
    except Exception:
        page_mover()

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 2021-07-08
    • 2020-01-18
    • 1970-01-01
    • 2023-02-23
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多