Как найти элемент, не найденный в shadow-root - PullRequest
0 голосов
/ 04 ноября 2019

Я новичок в автоматизации Python. Поэтому я хочу, чтобы я пытался автоматизировать бронирование авиабилетов на wego.co.in, но когда я ищу в xpath то же самое, xpath не выделяется, даже если я думаю, что получаю правильный xpath.

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

driver = webdriver.Chrome()
driver.maximize_window()

driver.get("https://www.wego.co.in/")

fly_from = driver.find_element_by_xpath('//input[@placeholder="From"]').click()
fly_from.send_keys("New Delhi, India")
sleep(0.1)
fly_to = driver.find_element_by_xpath('//input[@placeholder="to"]').click()
fly_to.send_keys("Goa, India")

Я получаю сообщение об ошибке "элемент не найден"

1 Ответ

0 голосов
/ 04 ноября 2019

Элемент находится внутри нескольких вложенных shadow-root секций. Вам нужно переключаться на каждый раздел по одному, например <ifram> s, однако Selenium не имеет встроенной поддержки shadow-root.

. В качестве обходного пути можно получить раздел shadow-root в качестве WebElement. используя JavaScript и используйте этот элемент для нахождения элементов внутри раздела

driver.get("https://www.wego.co.in/")

element = driver.find_element_by_id('app')
shadow_root = self.get_shadow_root(driver, element)

element = shadow_root.find_element_by_css_selector('[id="base"] > wego-search-form')
shadow_root = self.get_shadow_root(driver, element)

element = shadow_root.find_element_by_class_name('flightSearchForm')
search_bar_shadow_root = self.get_shadow_root(driver, element)

element = search_bar_shadow_root.find_element_by_id('dep')
shadow_root = self.get_shadow_root(driver, element)

fly_from = shadow_root.find_element_by_css_selector('[placeholder="From"]')
fly_from.click()
fly_from.send_keys("New Delhi, India")

element = search_bar_shadow_root.find_element_by_id('arr')
shadow_root = self.get_shadow_root(driver, element)

fly_to = shadow_root.find_element_by_css_selector('[placeholder="to"]')
fly_to.click()
fly_to.send_keys("Goa, India")

def get_shadow_root(self, driver, element):
    return driver.execute_script('return arguments[0].shadowRoot', element)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...