【问题标题】:find element inside element selenium python chrome driver在元素 selenium python chrome 驱动程序中查找元素
【发布时间】:2020-05-15 23:31:10
【问题描述】:

当我尝试在元素中获取元素时遇到问题。我尝试了 2 种方法来实现这一点,但不幸的是没有成功。

element_list = driver.find_elements_by_xpath("//div[@class='WGGO WKFO']//ul//li[@class='WO0F WHHO WI5 WF2F']//div[@class='WP0F WN0F']//div[@class='WDQY']//ul[@class='WHDR WCQY']")

以上代码获取所有DOM元素列表。

方法一:

for element in element_list:
    element_text = element.find_element_by_xpath("//div[@class='WP0F WN0F']//div[@class='WDQY']//ul[@class='WHDR WCQY']").text
    print(element_text)

当我尝试这个时,它总是返回我第一个元素的文本而不是相应的元素文本。

在搜索时,我发现了一个链接,其中有人问我想要的问题。

Selenium Webdriver finding an element in a sub-element

当我尝试p0deje's 回答时,它给了我空白数组。

element_text = element.find_elements_by_xpath(".//div[@class='WP0F WN0F']//div[@class='WDQY']//ul[@class='WHDR WCQY']").text

结果:[]

请告诉我我该怎么做才能做到这一点,我怎样才能在元素中获取元素细节?

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    这一行代码的问题: element_text = element.find_elements_by_xpath(".//div[@class='WP0F WN0F']//div[@class='WDQY']//ul[@class='WHDR WCQY']").text ist 查找元素会重新调整列表,并且列表没有 .text 属性。 尝试遍历返回的列表:

    elements = driver.find_elements_by_xpath("//div[@class='WGGO WKFO']//ul//li[@class='WO0F WHHO WI5 WF2F']//div[@class='WP0F WN0F']//div[@class='WDQY']//ul[@class='WHDR WCQY']")
    #as a list comprehention
    element_text= [element.text for element in elements]
    #or as a for loop
    element_text=[]
    for element in elements:
        element_text.append(element.text)
    

    【讨论】:

    • 即使这行代码也返回一个空数组elements = element.find_elements_by_xpath(".//div[@class='WP0F WN0F']//div[@class='WDQY']//ul[@class='WHDR WCQY']")
    • @Rana.Amir 是的,对不起,我在输入驱动程序时输入了元素。我更新了代码如果它有效
    • 它工作正常,但是当我想右键单击元素而不是文本时,它总是单击第一个元素。 :(elements = driver.find_elements_by_xpath("//div[@class='WGGO WKFO']//ul//li[@class='WO0F WHHO WI5 WF2F']//div[@class='WP0F WN0F']//div[@class='WDQY']//ul[@class='WHDR WCQY']")new_elements= [element for element in elements]for element in new_elements: action = ActionChains(driver) action.move_to_element(element).perform(); action.context_click().perform()
    • 认为你应该这样做:for element in new_elements: actionChains.context_click(element).perform()
    【解决方案2】:

    element_list 已经包含您要打印的所有元素,即element_text。你不能使用WebElement来定位自己,它没有失败NoSuchElementException的原因是当使用xpath从另一个元素中定位元素时,你需要指定当前上下文.

    find_element_by_xpath('.//div')
    

    遍历element_list

    for element in element_list:
        print(element.text)
    

    或者如果你真的想拆分它,因为你可以使用父列表上的更多操作(注意她缩短了element_listxpath

    element_list = driver.find_elements_by_xpath("//div[@class='WGGO WKFO']//ul//li[@class='WO0F WHHO WI5 WF2F']")
    for element in element_list:
        element_text = element.find_element_by_xpath(".//div[@class='WP0F WN0F']//div[@class='WDQY']//ul[@class='WHDR WCQY']").text
        print(element_text)
    

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2016-09-28
      • 1970-01-01
      • 2022-11-07
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多