Итерация по тегу li с Selenium не получает .text из первых двух элементов списка - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь перебрать тег li на https://game -rainbow6.ubi.com / en-us / uplay / player-statistics / dbd1cef3-d69d-4296-a235-ae8d7d70363f / multiplayer на вкладке оператора (выбор вкладки не меняет ссылку, извините) у меня нет проблем с переходом на вкладку, но когда я получаю тег li и перебираю его, чтобы получить все четыре веб-элемента, которые мне нужны (имя, времяпроиграл, k / d, w / l) пропускает первые два оператора в списке.Остальное печатает просто отлично.Я попытался и неявно ждать, чтобы просто посмотреть, не загружались ли первые два не так быстро, но это не сработало, затем я попробовал явное ожидание, которое есть в коде прямо сейчас, но оно каждый раз истекает.Я также попытался найти элементы по xpath.Это полный xpath к первому имени оператора

//*[@id="section"]/div/div/div[2]/div/div[1]/div/div/div/div/article[3]/div[1]/div/div/div/nav/ul/li[1]/div/div[1]/div[1]/div/div[1]/p

Я попытался сделать

.//div/div[1]/div[1]/div/div[1]/p 

в цикле for, поскольку мне просто был нужен хвостовой конец пути для каждого элемента,но он по-прежнему пропускает первых двух операторов.

Я создал тестовую учетную запись, чтобы люди могли правильно просматривать html:

email = UbiTest1337@gmail.com
pwd = Password1

def scrapeOperatorStats(self):
    #navigate to operator tab
    operator_tab = self.driver.find_element_by_xpath('//* [@id="section"]/div/div/div[2]/div/div[1]/div/div/div/div/article[1]/div[2]/div/div[1]/button')

    self.driver.execute_script("arguments[0].click();", operator_tab)
    #wait for operator stats elements to load
 WebDriverWait(self.driver,10).until(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="section"]/div/div/div[2]/div/div[1]/div/div/div/div/article[3]/div[1]/div/div/div/nav/ul/li[1]/div/div[1]/div[1]/div/div[1]/p')))

    #Get the li tag that is a list of all operators and thier respective stats
    operator_list_set = self.driver.find_element_by_xpath('//*[@id="section"]/div/div/div[2]/div/div[1]/div/div/div/div/article[3]/div[1]/div/div/div/nav/ul')
    operators = operator_list_set.find_elements_by_tag_name('li')

    for operator in operators:
        operator_stats = operator.find_elements_by_tag_name('p')
        for stat in operator_stats:
            print(stat.text)

1 Ответ

0 голосов
/ 23 декабря 2018

Я обнаружил, что вы можете использовать get_attribute ('innerHTML'), и он получит все элементы, вам даже не нужно переключать вкладки.

    #Get the li tag that is a list of all operators and thier respective stats
    operator_list_set = self.driver.find_element_by_xpath('//*[@id="section"]/div/div/div[2]/div/div[1]/div/div/div/div/article[3]/div[1]/div/div/div/nav/ul')
    operators = operator_list_set.find_elements_by_tag_name('li')

    for operator in operators:
        operator_stats = operator.find_elements_by_tag_name('p')
        for stat in operator_stats:
            print(stat.get_attribute('innerHTML'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...