【问题标题】:How to locate element not found in shadow-root如何定位在 shadow-root 中找不到的元素
【发布时间】:2020-02-29 16:09:48
【问题描述】:

我是 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")

我收到“找不到元素”错误

【问题讨论】:

    标签: python selenium selenium-webdriver xpath automation


    【解决方案1】:

    该元素位于多个嵌套的 shadow-root 部分中。您需要像<ifram>s 一样一次切换到每个部分,但是Selenium 没有对shadow-root 的内置支持。

    一种解决方法是使用 JavaScript 将 shadow-root 部分作为 WebElement 并使用此元素来定位该部分内的元素

    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)
    

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 2021-04-03
      • 2019-04-25
      • 2021-07-27
      • 2021-02-06
      • 2018-05-11
      • 2021-07-21
      • 2021-09-17
      • 2020-10-29
      相关资源
      最近更新 更多