如何在下拉列表中选择必须滚动的项目?

时间:2019-08-01 06:56:12

标签: python selenium selenium-chromedriver

在以下网站上:https://www1.hkexnews.hk/search/titlesearch.xhtml?lang=en

我正在尝试通过硒选择以下下拉列表选项: 在Headline category and Document Type下,在第一个下拉列表上选择Headline Category,然后在第二个列表上选择Announcements and Notices -> New Listings (Listed Issuers/New Applicants -> Allotment Results

我已经意识到您必须使用driver.find_element_by_css_selector(),因为列表中的所有项目都没有唯一的ID。 我还意识到,当该选项不在视图中时,您必须滚动页面,以便CSS选择器可以选择它。

我应该做什么,但是没有吗?有人可以帮我解决这个问题吗?

```python

# Select dropdown list
driver.find_element_by_css_selector('#rbAfter2006 > div > div > div').click()
# Select Announcements and Notices
driver.find_element_by_css_selector('#rbAfter2006 > div ~ div > div > div > div > ul > li ~ li ').click()

# Scroll down so that New Listings (Listed Issuers/New Applicants) is in view
element = driver.find_element_by_css_selector('#rbAfter2006 > div ~ div > div > div > div > ul > li ~ li > a '
                                    '~ div > div > ul > li ~ li ~ li ~ li ~ li ~ li ~ li  ~ li ~ li')

actions = ActionChains(driver)
actions.move_to_element(element).perform()

# Click New Listings (Listed Issuers/New Applicants)
driver.find_element_by_css_selector('#rbAfter2006 > div ~ div > div > div > div > ul > li ~ li > a '
                                    '~ div > div > ul > li ~ li ~ li ~ li ~ li ~ li ~ li ').click()


# THIS IS WHAT FAILS, Can't find element? I am currently printing the box so I know what is selected
print(driver.find_element_by_css_selector('#rbAfter2006 > div ~ div > div > div > div > ul > li ~ li > a '
                                    '~ div > div > ul > li ~ li ~ li ~ li ~ li ~ li ~ li > a ~ div > ul > li ~ li').text)

```

我当前收到未找到错误的元素

3 个答案:

答案 0 :(得分:0)

您能否尝试使用

之类的CSS选择器从下拉列表中获取列表?
  

ul li a

然后循环查找匹配的值并单击它

答案 1 :(得分:0)

理想情况下,我们不应该选择具有如此复杂的CSS选择器的元素,而应尝试缩短CSS选择器。

然后

尝试将鼠标悬停在下拉菜单中的第一个元素上,

driver.action.move_to(first_element_in_dropdown).perform

然后

尝试滚动到所需的元素,

driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center', inline: 'nearest'});",element_to_be_selected)

注意:该代码在Ruby中,请尝试翻译为python并使用。这可能有帮助

答案 2 :(得分:0)

要从下拉列表中单击项目,请诱导transform: [ {translate: [900, 0 , 0]}, ] WebDriverWait,然后使用presence_of_element_located()并使用以下xpath单击元素。

location_once_scrolled_into_view

浏览器快照

enter image description here