首页 > 解决方案 > 无法单击选项包装器中的选项 - python selenium

问题描述

我无法在弹出气泡中选择一个选项(抱歉,我不太确定如何确定它是什么类型的弹出窗口)我真的不介意我选择什么选项,我只需要单击其中一个。这是它在代码中的样子:

<div data-v-d4e6e290="" class="f_input-optionsWrapper js_optionsWrapper" style=""><div data-v-d4e6e290="" class="f_input-options"><div data-v-d4e6e290="" class="f_input-header js_header">Oslovení</div> <div data-v-d4e6e290="" class="f_input-options-content"><div class="f_customScroll" data-v-d4e6e290="" style="max-height: 883px;"><div data-v-68c7351e="" class="f_input-option"><div data-v-68c7351e="" data-testid="Pan" class="f_input-option-text xh-highlight">
        Pan
    </div></div><div data-v-68c7351e="" class="f_input-option"><div data-v-68c7351e="" data-testid="Paní" class="f_input-option-text">
        Paní
    </div></div></div> <div data-v-d4e6e290="" class="f_input-footer js_footer"><!----> <span data-v-d4e6e290="" class="f_button f_button--common f_button_set--small">Potvrdit</span></div></div></div></div>

这是弹出框

我尝试以多种方式定位元素,第一个问题是它总是检测到两个结果。弹出窗口是选择旅行者的性别,我有两个旅行者,所以我猜它也检测到第二个旅行者的第二个弹出窗口。

我试图找到:

volbaOsloveni = driver.find_elements_by_xpath("//*[@class='f_input-optionsWrapper js_optionsWrapper'] //*[@class='f_input-option-text']")
volbaOsloveni2 = driver.find_elements_by_xpath("//*[@data-testid='Pan']")
volbaOsloveni3 = driver.find_element_by_xpath("//*[@class='f_customScroll'] //*[@data-testid='Pan']")

所有这些都给了我两个我认为应该可行的结果。每当我尝试单击元素时,硒要么说它没有找到该元素,要么只是传递它,因为它已经单击了该元素并且脚本继续。

点击尝试:

volbaOsloveni[0].click()
driver.execute_script("arguments[0].click();", volbaOsloveni3)
volbaOsloveni2[1].click()

我尝试了 find_elementS 方法,因此我得到了更多结果,这就是为什么我尝试使用 [0] 等单击第一个元素的原因。execute_script 或 click() 都不能完成这项工作,我现在有点绝望。

有人可以帮我吗?将不胜感激!提前致谢

标签: pythonhtmlcssselenium

解决方案


要单击带有文本的元素,Pan您可以使用以下任一Locator Strategies

  • 使用css_selector

    driver.find_element(By.CSS_SELECTOR, "div.f_input-options div.f_input-options-content div[data-testid='Pan']").click()
    
  • 使用xpath

    driver.find_element(By.XPATH, "//div[@class='f_input-options']//div[@class='f_input-options-content']//div[@data-testid='Pan']").click()
    

所需的元素是动态元素,因此理想情况下,单击需要诱导WebDriverWait的元素element_to_be_clickable(),您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.f_input-options div.f_input-options-content div[data-testid='Pan']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='f_input-options']//div[@class='f_input-options-content']//div[@data-testid='Pan']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

推荐阅读