为了账号安全,请及时绑定邮箱和手机立即绑定

循环通过 XPATH 硒 PYTHON

循环通过 XPATH 硒 PYTHON

慕标5832272 2021-11-30 10:39:20
我想下载2015-2016赛季到2018-2019赛季所有球队的文件。但是,我试图循环遍历除括号中的一个数字外相同的 Xpath 以选择不同的团队和年份;我用 %b 和 %i 替换数字的最后一个括号。这是我的代码:from selenium import webdriverimport csvfrom selenium.webdriver.support.ui import Selectfrom datetime import date, timedeltafrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECimport timefrom selenium.webdriver.common.keys import Keysfrom selenium.common.exceptions import TimeoutException chromedriver =("C:/Users/Michel/Desktop/python/package/chromedriver_win32/chromedriver.exe")driver = webdriver.Chrome(chromedriver)driver.get("https://evolving-hockey.com/")#Click Games and then game logsGamestab= driver.find_element_by_xpath("/html/body/nav/div/ul/li[6]/a")Gamestab.click()Gameslog= driver.find_element_by_xpath("/html/body/nav/div/ul/li[6]/ul/li[3]/a")Gameslog.click()# Click Teams tab Teamstab= driver.find_element_by_xpath("//*[@id='tab-3278-3']/div/ul/li[3]/a")Teamstab.click()# Loop all teams and all seasons## TEAMfor b in range(1,33):    Team= driver.find_element_by_xpath("//*[@id='tab-3959-3']/div/div[1]/div[1]/div/div/div")    Team.click()    Teamname= driver.find_element_by_xpath("//*[@id='tab-3959-3']/div/div[1]/div[1]/div/div/div/div[2]/div/div[%b]" %(b))    Teamname.click()# ## Season- 20152016to20182019    for i in range(1,5):        Season=driver.find_element_by_xpath("//*[@id='tab-3959-3']/div/div[1]/div[2]/div/div/button")        Season.click()        Season1819=driver.find_element_by_xpath("//*[@id='tab-3959-3']/div/div[1]/div[2]/div/div/div/ul/li[%s]" %(i))        Season1819.click()我认为它应该通过使用 % 并分配一个变量来工作,该变量实际上是 for 循环中的迭代元素,就像我尝试过的那样,但它不起作用。
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

如果您想使用现有代码,请更正以下行。只是将 xpath 字符串末尾的[%b]更改为[%d]。


旧代码:


Teamname= driver.find_element_by_xpath("//*[@id='tab-3959-3']/div/div[1]/div[1]/div/div/div/div[2]/div/div[%b]" %(b))

更新代码:


Teamname= driver.find_element_by_xpath("//*[@id='tab-3959-3']/div/div[1]/div[1]/div/div/div/div[2]/div/div[%d]" %(b))

这是折射的代码。我没有机会测试这个。


    #click on Games

    driver.find_element_by_css("ul.nav.navbar-nav a[data-value='Games']").click()

    #click on Game Logs

    driver.find_element_by_css_selector("ul.dropdown-menu a[data-value='Game Logs']").click()

    #switch to Teams tab

    driver.find_element_by_css_selector("ul.nav.nav-tabs a[data-value='Teams']").click()

    #click the teams listbox

    teamNames = driver.find_element_by_xpath("//div[@class='tab-pane active' and @data-value='Teams']//label[.='Team:']//parent::div//div[@class='selectize-dropdown-content']").click()

    #get the list of team names

    teams = driver.find_elements_by_xpath("//div[@class='tab-pane active' and @data-value='Teams']//label[.='Team:']//parent::div//div[@class='selectize-dropdown-content']//div[@class='option']")


    # get the list of seasons

    seasons = driver.find_elements_by_xpath("//div[@class='tab-pane active' and @data-value='Teams']//select[@id='game_logs_teams_season']/option")

    # iterate through each team

    for team in teams:

        team.click()

        # iterate through each season

        for season in seasons:

            seanson.click()


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信