【问题标题】:How to select element from dropdown selenium如何从下拉硒中选择元素
【发布时间】:2021-08-31 04:54:54
【问题描述】:

我只是 selenium 的初学者,需要从带有 html 标签的下拉菜单中获取元素:

<div class="dropdown dropdown-block dropdown--saved-search open">
                            <a id="dropdown1" class="form-control form-control-lg select-control" data-toggle="dropdown" role="button">
                                <span id="selectedSavedSearchName" data-bind="text: SelectedSavedSearchName">Saved Searches</span>
                            </a>
                            <ul class="dropdown-menu dropdown-menu-block" aria-labelledby="dropdown1" id="SavedSearchListItems" data-bind="foreach: SavedSearches">
                                <li class="dropdown-menu_item" data-bind="click: $root.SavedSearchSelected.bind($parent, $data)">
                                    <span class="RedirectUrl" style="display:none" data-bind="text: SearchUrl">url=twlTCq14LI9OyNaWz8gyGLys61rYhnwWjChZSjB5HlY%3d</span>
                                    <a class="SavedSearchName" data-bind="text: SaveSearchName">avalon</a>
                                    <button class="btn btn-icon-only btn--delete js_btnDeleteSavedSearch" data-bind="click: $root.OpenConfirmationPopupForDeleteSearch.bind($root, $parent)">
                                        <span class="icon">
                                            <svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="M7.667 42.667C7.667 45.6 10.067 48 13 48h21.333c2.934 0 5.334-2.4 5.334-5.333v-32h-32v32zm34.666-40H33L30.333 0H17l-2.667 2.667H5V8h37.333V2.667z" fill-rule="nonzero"></path></svg>

                                        </span>
                                    </button>
                                </li>
                            
                                <li class="dropdown-menu_item" data-bind="click: $root.SavedSearchSelected.bind($parent, $data)">
                                    <span class="RedirectUrl" style="display:none" data-bind="text: SearchUrl">url=QiCRRma69RVV8rZtQS3D4d3R%2fwHJwgFlAoBPVUw%2fbZI%3d</span>
                                    <a class="SavedSearchName" data-bind="text: SaveSearchName">buy now</a>
                                    <button class="btn btn-icon-only btn--delete js_btnDeleteSavedSearch" data-bind="click: $root.OpenConfirmationPopupForDeleteSearch.bind($root, $parent)">
                                        <span class="icon">
                                            <svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="M7.667 42.667C7.667 45.6 10.067 48 13 48h21.333c2.934 0 5.334-2.4 5.334-5.333v-32h-32v32zm34.666-40H33L30.333 0H17l-2.667 2.667H5V8h37.333V2.667z" fill-rule="nonzero"></path></svg>

                                        </span>
                                    </button>
                                </li>
                            
                                <li class="dropdown-menu_item" data-bind="click: $root.SavedSearchSelected.bind($parent, $data)">
                                    <span class="RedirectUrl" style="display:none" data-bind="text: SearchUrl">url=u14wnnlX4CFa8PPr%2bR9gxXbSGLj98QMWI4AjLKYEdU4%3d</span>
                                    <a class="SavedSearchName" data-bind="text: SaveSearchName">highlander</a>
                                    <button class="btn btn-icon-only btn--delete js_btnDeleteSavedSearch" data-bind="click: $root.OpenConfirmationPopupForDeleteSearch.bind($root, $parent)">
                                        <span class="icon">
                                            <svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="M7.667 42.667C7.667 45.6 10.067 48 13 48h21.333c2.934 0 5.334-2.4 5.334-5.333v-32h-32v32zm34.666-40H33L30.333 0H17l-2.667 2.667H5V8h37.333V2.667z" fill-rule="nonzero"></path></svg>

                                        </span>
                                    </button>
                                </li>
                            
                                <li class="dropdown-menu_item" data-bind="click: $root.SavedSearchSelected.bind($parent, $data)">
                                    <span class="RedirectUrl" style="display:none" data-bind="text: SearchUrl">url=S7d%2fikaBedxE9VnjjWxxpLnB%2bvNtgY%2blIW0Xr9X5a3s%3d</span>
                                    <a class="SavedSearchName" data-bind="text: SaveSearchName">kamry</a>
                                    <button class="btn btn-icon-only btn--delete js_btnDeleteSavedSearch" data-bind="click: $root.OpenConfirmationPopupForDeleteSearch.bind($root, $parent)">
                                        <span class="icon">
                                            <svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="M7.667 42.667C7.667 45.6 10.067 48 13 48h21.333c2.934 0 5.334-2.4 5.334-5.333v-32h-32v32zm34.666-40H33L30.333 0H17l-2.667 2.667H5V8h37.333V2.667z" fill-rule="nonzero"></path></svg>

                                        </span>
                                    </button>
                                </li>
                            
                                <li class="dropdown-menu_item" data-bind="click: $root.SavedSearchSelected.bind($parent, $data)">
                                    <span class="RedirectUrl" style="display:none" data-bind="text: SearchUrl">url=AOgkSqNgd5UXBdn4NutgXpaFLe%2f%2f2lCxnw8%2fYC7E63Y%3d</span>
                                    <a class="SavedSearchName" data-bind="text: SaveSearchName">parser</a>
                                    <button class="btn btn-icon-only btn--delete js_btnDeleteSavedSearch" data-bind="click: $root.OpenConfirmationPopupForDeleteSearch.bind($root, $parent)">
                                        <span class="icon">
                                            <svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="M7.667 42.667C7.667 45.6 10.067 48 13 48h21.333c2.934 0 5.334-2.4 5.334-5.333v-32h-32v32zm34.666-40H33L30.333 0H17l-2.667 2.667H5V8h37.333V2.667z" fill-rule="nonzero"></path></svg>

                                        </span>
                                    </button>
                                </li>
                            
                                <li class="dropdown-menu_item" data-bind="click: $root.SavedSearchSelected.bind($parent, $data)">
                                    <span class="RedirectUrl" style="display:none" data-bind="text: SearchUrl">url=l%2b8avDt52v0eO3kj4dCWdUk97FlMGwWqR6TKmhqxQiY%3d</span>
                                    <a class="SavedSearchName" data-bind="text: SaveSearchName">toyot</a>
                                    <button class="btn btn-icon-only btn--delete js_btnDeleteSavedSearch" data-bind="click: $root.OpenConfirmationPopupForDeleteSearch.bind($root, $parent)">
                                        <span class="icon">
                                            <svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="M7.667 42.667C7.667 45.6 10.067 48 13 48h21.333c2.934 0 5.334-2.4 5.334-5.333v-32h-32v32zm34.666-40H33L30.333 0H17l-2.667 2.667H5V8h37.333V2.667z" fill-rule="nonzero"></path></svg>

                                        </span>
                                    </button>
                                </li>
                            </ul>
                        </div>

但我尝试通过 xpath 找到它,但没有结果。我需要单击它,然后从下拉列表中选择名称为“parser”的选项。谁能帮忙,我做错了什么?我正在使用 python 和 chromedriver screenshot of dropdown menu

【问题讨论】:

  • 你能分享一个指向那个页面的链接吗?
  • 当然可以,可惜没有授权你不会得到这个菜单iaai.com/Vehiclelisting/Automobiles
  • 我看到了网页。那里有什么下拉菜单?什么场景,流程?
  • 编辑帖子,添加html代码

标签: python selenium parsing selenium-chromedriver html-parsing


【解决方案1】:

如果使用SelectOption 标记构建下拉菜单,您可以使用Selenium 中的Select class,因为这不适合您。

你必须像这样点击下拉菜单:

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text() , 'Saved Searches')]"))).click()

然后将所有选项存储在一个列表中并迭代该列表并使用 if 子句查看您是否有一个想要的元素,然后单击它。

for option in driver.find_elements(By.CSS_SELECTOR , "li.menu_item a.SavedSearchName"):
    if option.text == "buy now":
        option.click()

【讨论】:

  • 全屏启动浏览器并重试driver.maximize_window()
  • 我正在使用选项 options.add_argument('--no-sandbox') options.add_argument("--window-size=800,600") options.add_argument('--headless') 选项.add_argument('--disable-dev-shm-usage')
  • options.add_argument("--window-size=1920,1080")替换这个options.add_argument("--window-size=800,600")
  • 还有一个问题,解析器很大,如果我要改变分辨率,我就需要编码了。它工作得很好,但网站发生了一些变化,完全保存了搜索
  • 出于测试目的,您可以增加分辨率以检查它是否有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2015-12-31
  • 1970-01-01
  • 2020-02-08
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多