代码之家  ›  专栏  ›  技术社区  ›  undetected Selenium

如何使用Selenium和Python从自动建议中选择选项

  •  0
  • undetected Selenium  · 技术社区  · 4 年前

    我正在尝试从自动建议中选择一个选项,然后在 Selenium documentation 网站但我找不到任何这些建议。

    代码试用:

    driver.get('https://www.selenium.dev/documentation/en/')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#search-by"))).send_keys("selenium")
    

    自动建议的快照:

    documentations

    有人能帮我选择任何自动建议吗?

    0 回复  |  直到 4 年前
        1
  •  3
  •   Moshe Slavin    4 年前

    这个 autocomplete-suggestions div 这包含了所有 autocomplete-suggestion 's。

    这里是一些元素 enter image description here

    为了捕捉元素,我使用 f8 按钮,这样元素就不会消失。

    下面是一个可视化代码片段:

    def highlight_element(element):
        driver_elem = element.parent
    
        def apply_style(s):
            driver_elem.execute_script("arguments[0].setAttribute('style', arguments[1]);",
                                       element, s)
    
        original_style = element.get_attribute('style')
        apply_style("background: yellow; border: 2px solid red;")
        sleep(0.5)
        apply_style(original_style)
    
    driver.get("https://www.selenium.dev/documentation/en/")
    WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#search-by")))
    driver.find_element_by_css_selector("#search-by").send_keys("selenium")
    WebDriverWait(driver,30).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".autocomplete-suggestions  .autocomplete-suggestion")))
    for ele in driver.find_elements_by_css_selector(".autocomplete-suggestions  .autocomplete-suggestion"):
        highlight_element(ele)
    
        2
  •  3
  •   Wilfred Clement    4 年前

    +1代表@Moshe Slavin的回答。这个 autocomplete-suggestions autocomplete-suggestion's

    为了捕捉元素,我使用 getPageSource() 打印页面中的元素。

    一旦我找到了元素,下面剩下的代码就不言自明了

    wait.until(ExpectedConditions.elementToBeClickable(By.className("autocomplete-suggestion")));
    
    List<WebElement> abc = driver.findElements(By.className("autocomplete-suggestion"));
    
    String value = "Remote WebDriver client";
    
    List<String> def = new ArrayList<String>();
    
        for (int i = 0; i < abc.size(); i++) {
    
                //Get the values and store it in a list
                def.add(abc.get(i).getAttribute("data-title"));
    
            }
    
            if (def.contains(value))
    
                abc.get(def.indexOf(value)).click();
    
            else
                System.out.println("Value not present");