Поиск элемента после поиска по тексту в селеновом питоне

avatar
Crash_Override
9 августа 2021 в 01:51
104
1
-1

Я пытаюсь найти позицию элемента, где был найден текст, который я искал, на странице, где он мог появиться с позиции 1-10, и они случайным образом изменяются на разные позиции после обратного отсчета. Возьмем, к примеру: Мой поиск был «CHE», он мог появиться где угодно с позиции 1-10 в xpath //div[@class="gb-widget_match-list ext-widget_match-list"] внутри iframe страницы. «CHE» был найден с driver.find_element_by_xpath('//*[contains(text(), "CHE")]').is_displayed(), но я хочу использовать python, чтобы найти элемент, а также его элемент шансов, чтобы можно было щелкнуть нечетное.

Вот ссылка на сайт: https://www.betking.com/virtuals/v/kings-league Спасибо.

Источник
pmadhu
9 августа 2021 в 05:56
0

Поделитесь блоком кода, который вы пробовали.

Ответы (1)

avatar
pmadhu
9 августа 2021 в 06:30
0

Если вы хотите щелкнуть событие, основанное на командах, код ниже может вам помочь.

driver.implicitly_wait(10)
driver.get("https://www.betking.com/virtuals/v/kings-league")
driver.switch_to.frame(1)
teams = driver.find_elements_by_xpath("//div[@class='gb-widget_match-info-teams']")
for team in teams:
    value = team.get_attribute("innerText").replace('\n','')
    if "CHE" in value:
        team.click()
        time.sleep(2)
        break
driver.quit()

Обновление: для навигации с помощью кнопок Arrow.

driver.get("https://www.betking.com/virtuals/v/kings-league")
driver.switch_to.frame(1)
teams = driver.find_elements_by_xpath("//div[@class='gb-widget_match-info-teams']")
teams[0].click()
time.sleep(2)
nextarrow = driver.find_element_by_xpath("//span[@class='gb-widget_content-swiper-next']")
while "disabled" not in nextarrow.get_attribute("class"):
    nextarrow.click()
    time.sleep(1)

Обновление-2:

driver.get("https://www.betking.com/virtuals/v/kings-league")
driver.switch_to.frame(1)
next = driver.find_element_by_xpath("//span[@class='gb-widget_content-swiper-next']")
for i in range(3):
    next.click()
    time.sleep(1)

teams = driver.find_elements_by_xpath("//div[contains(@class,'swiper-slide-active')]/div")
for team in teams:
    time.sleep(1)
    value = team.find_element_by_xpath(".//div[@class='gb-widget_match-info-teams']").get_attribute("innerText").replace('\n','')
    if "CHE" in value:
        buttons = team.find_elements_by_tag_name("button")
        # for button in buttons:
        #     print(button.get_attribute("innerText"))
        buttons[0].click()
        time.sleep(2)
        break
driver.quit()
Crash_Override
9 августа 2021 в 07:55
0

Оно работает. Спасибо. Не могли бы вы объяснить это: value = team.get_attribute("innerText").replace('\n','') и почему вы заменили новую строку без пробела.

pmadhu
9 августа 2021 в 08:32
0

@Crash_Override — был более конкретен в отношении результата value. Например, без замены value будет LIV\n-\nSOU, но с ней будет LIV-SOU. Приятно читать и понимать.

Crash_Override
9 августа 2021 в 10:26
0

Ага понял. Моя основная цель - щелкнуть по нечетному напрямую, не нажимая на команду if "CHE" in value: is True . Я специально хочу щелкнуть нечетное значение на вкладке «Более / меньше 1,5» в iframe def switchToOver1_5(): driver.find_element_by_xpath('//div[@class="swiper-pagination-bullet gb-widget_swiper-pagination-dot ext-widget_swiper-pagination-dot"][3]').click() . То есть, щелкнув коэффициент больше 1,5 или меньше 1,5, не щелкая команды и не переходя к строке «Больше / меньше 1,5», а затем не нажимая любой из коэффициентов. Спасибо.

pmadhu
9 августа 2021 в 11:44
0

@Crash_Override - Но опция Over/Under 1.5 появляется после того, как мы нажимаем на событие.

Crash_Override
9 августа 2021 в 12:01
0

Совершенно верно, мотив заключается в том, чтобы перейти на вкладку / раздел Over / Under 1.5 с помощью xpath driver.find_element_by_xpath('//div[@class="swiper-pagination-bullet gb-widget_swiper-pagination-dot ext-widget_swiper-pagination-dot"][3]'), а затем щелкнуть любой из коэффициентов, связанных с нужной командой.

pmadhu
9 августа 2021 в 13:29
0

@Crash_Override — такая навигация упрощается, когда мы нажимаем кнопку Arrow. код для того же обновляется в ответ.

Crash_Override
9 августа 2021 в 21:52
0

Да, я в курсе, кажется, вы не понимаете. Пожалуйста, ознакомьтесь с этим изображением ibb.co/Vxn3WKX. Где 1 представляет собой навигационный xpath driver.find_element_by_xpath('//div[@class="swiper-pagination-bullet gb-widget_swiper-pagination-dot ext-widget_swiper-pagination-dot"][3]'), а этот ibb.co/sC7ffzt указывает на коэффициенты, связанные с нужным нам матчем. Я хочу сначала перейти на вкладку Over / Under 1.5, а затем напрямую щелкнуть шансы, не нажимая на команду, перейти к строке Over / Under 1.5, а затем к шансам. надеюсь ты понимаешь

pmadhu
10 августа 2021 в 03:17
0

Да, теперь я понял. Обновил ответ.

Crash_Override
12 августа 2021 в 01:38
0

Это сработало, спасибо. Пожалуйста, не могли бы вы объяснить эту строку value = team.find_element_by_xpath(".//div[@class='gb-widget_match-info-teams']").get_attribute("innerText").replace('\n',''). Кажется, я не понимаю, почему вы использовали каждый элемент списка, чтобы найти другой веб-элемент.

pmadhu
12 августа 2021 в 02:48
0

@Crash_Override — мы пытаемся выбрать шансы на основе команды, поэтому сначала нам нужно выбрать команду, а затем попытаться получить доступ к ее параметрам.

Crash_Override
12 августа 2021 в 13:47
0

Хорошо, я попробую. По какой причине элемент может быть найден в браузере с его xpath, а не в IDE?

pmadhu
13 августа 2021 в 10:13
0

@Crash_Override - Элемент не найден на стороне? Я не понимаю вашего вопроса.

Crash_Override
14 августа 2021 в 03:50
0

Я имел в виду интегрированную среду разработки, я искал элемент на веб-странице, но он не появлялся в IDE (он отображает пустой список), но отображается в браузере. Я обнаружил, что не переключился на iframe, где его можно было найти. Большое вам спасибо за ваше время.