【问题标题】:Selecting from search result list with Selenium and Python使用 Selenium 和 Python 从搜索结果列表中进行选择
【发布时间】:2021-01-07 22:05:51
【问题描述】:

我知道有类似的问题,但我无法利用这些解决方案。这就是为什么我要问我的具体问题。

我的代码如下:

 driver.get("https://")
    driver.maximize_window()
    login = driver.find_element_by_xpath(email_xpath).send_keys(email)
    login = driver.find_element_by_xpath(pwd_xpath).send_keys(pwd)
    login = driver.find_element_by_xpath(continue_xpath)
    login.click()
    time.sleep(10)
    
    ticker = 'DB:0NU'
    search = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, search_xpath))).send_keys(ticker)
    
    time.sleep(10)
    
    print(search)
    
    elements = driver.find_elements_by_xpath("//*[@id='popup-portal']/div/div/div/div/ul")
    for element in elements:
        print(element.text)
        try:
            if element.text == ticker:
                element.click()
        except:
            pass

我没有得到任何错误结果,但解决方案并不令人满意,因为我的代码没有从搜索结果中选择“DB:0NU”,即使可以在搜索结果中看到它。如何让我的代码点击元素?

html源代码示例:

<ul data-cy-id="search-results-list" class="sc-gCwZxT kelPjw"><li>

谁能帮忙?

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    您对页面上的定位器(获取搜索结果的定位器)有一些问题。

    除此之外,在for 循环中,当找到所需的值时,您需要一个break,因为您不想在找到后继续搜索其他结果。

        driver.get("https://simplywall.st/dashboard")
        driver.maximize_window()
        wait = WebDriverWait(driver, 10)
        wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[name="username"]'))).send_keys(email)
        driver.find_element_by_css_selector('[name="password"]').send_keys(password)
        driver.find_element_by_css_selector('[data-cy-id="button-submit-login"]').click()
    
        ticker = 'DB:0NU'
        search = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[name="search-search-field"]'))).send_keys(ticker)
    
        elements = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[data-cy-id="search-results-list"] p')))
    
        for element in elements:
            print(element.text)
            try:
                if element.text == ticker:
                    element.click()
                    company = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[data-cy-id="company-header-title"]'))).text
                    print(company)
                    break
            except:
                pass
    

    【讨论】:

    • 感谢您的支持,不幸的是,单击该元素并切换到下一页仍然不起作用。
    • @Numpy 现已修复。 print(company) 现在正在从重定向页面打印 Nutanix
    • 谢谢,但我收到以下错误:文件“D:\... elements = WebDriverWait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[data-cy- id="search-results-list"] p'))) TypeError: until() missing 1 required positional argument: 'method' 不幸的是 element.click 没有重定向到下一页。
    • 那是因为你没有使用wait 变量而是WebDriverWaitWebDriverWait 是一个类,需要实例化,就像我在上面对 wait = WebDriverWait(driver, 10) 所做的那样
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 2017-03-06
    • 2020-05-18
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2013-04-02
    • 2022-12-17
    相关资源
    最近更新 更多