Selenium/Python“If not”语句后跟navigator.find\ elemen查找

2024-09-28 21:59:25 发布

您现在位置:Python中文网/ 问答频道 /正文

大家晚上好

我正在尝试从这个网站提取数据:

https://classic.sportsbookreview.com/betting-odds/nba-basketball/

程序逻辑基于以下循环。你知道吗

一旦网站上的页面打开,第一步就是打开日历,看看这个月是否有比赛。你知道吗

如果是这样的话,每一天的数据都会被写入xls文件。然后,当不再有匹配项可提取时,程序单击上一个月,并执行相同的语句。你知道吗

相反,如果一个月内没有一天进行过比赛,治疗人员会点击前一个月,并执行与之前相同的陈述。你知道吗

这是我的代码(抱歉用法语,如果不清楚,我可以翻译):

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    import xlsxwriter

    ## Création du fichier excel
    tableur = xlsxwriter.Workbook("PrédictionMachine.xlsx") ;
    feuille1 = tableur.add_worksheet("10-05-2018") ;

    ## Ouverture du navigateur (pour Chrome, remplacer Firefox par Chrome)
    navigateur = webdriver.Firefox() ;
    navigateur.get("https://classic.sportsbookreview.com/betting-odds/nba-        basketball/") ;  
    time.sleep(3) ;

    ## Initialisation des variables nécessaires pour écriture dans tableur
    row = 0 ;
    col = 0 ;
    moistraite = 0 ;
    matchtreeltrouve = 0 ;

    ## PHASE TEST À SUPPRIMER EN VF
    passage = 0

    try :
    ## Boucle : le programme s'arrête lorsque qu'une touche quelqconque du   clavier est pressée
       while True :

     ## Ouverture du calendrier
          print("Passage : ", passage) 
          Calendrier = navigateur.find_element_by_xpath("//a[@class='dd-go-button']").click() 
          time.sleep(3) 

     ## Récupération du mois/année en cours de traitement
          Mois = navigateur.find_element_by_xpath("//h2[@class='tbl-cal-top-middle']")

    ## Si aucun match n'est joué ce mois-ci, le programme clique sur le  mois précédent
          if not (navigateur.find_elements_by_xpath("//a[contains(@onclick, '20')]")) :
             print("------------------------------------------------") 
             print("Aucun match trouvé pour le mois de :", Mois.text) 
             print("------------------------------------------------") 
             Moisprecedent =  navigateur.find_element_by_xpath("//img[@alt='Left Arrow']").click() 
             moistraite += 1 
             print("------------------------------------------------") 
             print("Nombre de mois traité :", moistraite) ;
             print("------------------------------------------------")    
             time.sleep(3) ;
          else :

    ## Récupération de tous les jours du mois où un match a supposément été joué 
             JMtheorique = navigateur.find_elements_by_xpath("//a[contains(@onclick, '20')]")
             print("------------------------------------------------") 
             print("Matchs supposés trouvés pour le mois de :", Mois.text) 
             print("------------------------------------------------") 
             for jmtheorique in JMtheorique :
                 print("ON Y CROIT", jmtheorique.text)
                                                                               navigateur.find_element_by_xpath("//a[contains(@onclick, 'OddsEvent.GetLinkDate')]").click()
                 time.sleep(3)
          passage += 1
          Calendrier = navigateur.find_element_by_xpath("//a[@class='dd-go-button']").click() 
          time.sleep(2)
          Moisprecedent =   navigateur.find_element_by_xpath("//img[@alt='Left Arrow']").click() 
          moistraite += 1
    ## Arrêt Manuel du programme
    except KeyboardInterrupt :
       print("!/_\/_\/_\! Interruption manuelle du programme !/_\/_\/_\! ") 
       print("Le programme a été stoppé au mois de :", Mois.text) 
       print("Nombre de mois traité :", moistraite) 
       print("Nombre de match écrit :", matchtreeltrouve) ;
    ##navigateur.quit()

现在,我只想浏览不同的月份/日期。 对于八月,源代码运行良好。你知道吗

但当我七月份到达时,程序正在循环。似乎“如果不是”的说法写得不对,因为治疗找到了匹配,而这个月没有一场比赛。你知道吗


Tags: lebytimedesleepelementfindxpath
1条回答
网友
1楼 · 发布于 2024-09-28 21:59:25

好吧,我想我明白我的问题了。当我打开日历时,上个月/下个月的某些日子似乎就在眼前。当治疗到7月份时,8月4日(一个玩游戏的日子)也出现在日历上,这就解释了为什么这个程序在7月和8月之间循环。我只需要提取td中包含的a href,而不需要提取td类中包含的a href,如下所示:

The calendar

The kind of a href I need

我将进一步调查,以了解如何做到这一点。谢谢你的帮助。你知道吗

相关问题 更多 >