【问题标题】:Python - webCrawler - driver.close incorrect syntaxPython - webCrawler - driver.close 语法不正确
【发布时间】:2021-04-15 10:34:49
【问题描述】:

新手程序员,目前正在制作WebCrawler并想出了 driver.close()

^语法错误如下图,

但是,我使用上面的驱动程序没有问题,所以我现在很困惑

感谢我能得到的所有帮助

提前感谢团队

    import sys
    from selenium import webdriver as wd
    # from bs4 import BeautifulSoup as bs
    
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    # import pymysql as my
    import time
    # from Tour import TourInfo
    
    
    # First Url =
    # https://stamprally.org/?search_keywords=&search_keywords_operator=and&search_cat1=145&search_cat2=0
    
    # Second Url =
    # https://stamprally.org/?search_keywords=&search_keywords_operator=and&search_cat1=66&search_cat2=0
    
    
    driver.get(main_url)
    
    
    
    try:
        element = WebDriverWait(driver, 10).until(
            # 지정한 요소 한개가 발견되면 웨이트 종료
            EC.presence_of_element_located((By.ID, 'header_search_cat1'))
        )
    except Exception as e:
        print('오류 발생', e)
    
    driver.implicitly_wait(10)
    
    for prefectureValue in range(66, 121):
        offshorePrefectureValue = 145
        try:
            driver.get(
                f"https://stamprally.org/?search_keywords=&search_keywords_operator=and&search_cat1={prefectureValue}&search_cat2=0)")
            print(driver.current_url)
    
    # close  off
        driver.close()
        driver.quit()
        sys.exit()

SyntaxError: invalid syntax
PS C:\Users\eong\Desktop\stamprally_crawl> python run.py
  File "C:\Users\eong\Desktop\stamprally_crawl\run.py", line 70
    driver.close()
    ^
SyntaxError: invalid syntax

【问题讨论】:

    标签: python selenium syntax web-crawler


    【解决方案1】:

    从循环中删除它(缩进问题)。我认为这是主要的错误。

    driver.close()
    driver.quit()
    sys.exit()
    

    它会在循环的第一个循环后退出驱动程序。 在这里了解quit()close() 之间的区别:Difference between webdriver.Dispose(), .Close() and .Quit() 此外,如果您的条件正确,请输入break。 此外,您声明了offshorePrefectureValue,但并没有真正使用它。 另一个问题与您的问题无关:

    try:
        element = WebDriverWait(driver, 10).until(
            # 지정한 요소 한개가 발견되면 웨이트 종료
            EC.presence_of_element_located((By.ID, 'header_search_cat1'))
        )
    except Exception as e:
        print('오류 발생', e)
    

    这里也不需要try/except。如果元素不存在,Selenium 将抛出异常。

    【讨论】:

    • 有效积分感谢@vitaliis 我将代码更改如下,''' for prefectureValue in list(range(66, 121))+[145]: try: driver.get( f"@987654322 @{prefectureValue}&search_cat2=0)") print(driver.current_url) except Exception as e: print('오류 발생', e) ''' 最好,如果你看到任何事情,请随时告诉我,加油伙伴跨度>
    • 你也可以在这里查看如何在 Selenium 中使用显式等待 stackoverflow.com/questions/67082774/… 你以后肯定会用到它
    【解决方案2】:

    如果您只打开单个窗口,则在执行 driver.close() 后,您将一无所有 driver.quit()

    【讨论】:

    • 感谢您的意见。我会考虑到这一点。虽然它仍然没有解决语法错误。这对我来说是一个真正的头脑风暴时刻
    • 您能分享一下您在问题中收到的语法错误吗?
    • 我还要说你正试图退出/关闭循环中的驱动程序,即几次,而你一开始只初始化一次,但我不认为这是一个语法错误。
    • 我很好奇您是否也遇到相同的语法错误,非常感谢您的帮助
    • 今天我什至没有在我的电脑上安装 python :)
    【解决方案3】:

    try 也需要有一个 except(或 finally)块。所以要么删除try,要么添加一个except来捕获错误。

    当我错过了该死的 catchException 代码认为我不需要异常捕获因为我知道这不会出错时,我不敢相信我花了这么多时间寻找语法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多