Цикл XPATH СЕЛЕН ПИТОН - PullRequest
       4

Цикл XPATH СЕЛЕН ПИТОН

0 голосов
/ 08 марта 2019

Хочу скачать файлы всех команд за сезон 2015-2016 до 2018-2019.Тем не менее, я пытаюсь пройтись по Xpath, которые идентичны, за исключением одного числа в скобках, чтобы выбрать разные команды и годы;последняя скобка, где я заменил число на% b и% i.Вот мой код:

from selenium import webdriver
import csv
from selenium.webdriver.support.ui import Select
from datetime import date, timedelta
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.keys import Keys
from 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 logs
Gamestab= 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
## TEAM

for 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 Ответ

1 голос
/ 08 марта 2019

Если вы хотите использовать существующий код, исправьте приведенную ниже строку. Просто изменили [% b] на [% d] в конце строки xpath.

Старый код:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...