python - Selenium:选择带有子类别的多个下拉菜单
问题描述
尝试执行以下操作:
- 在“股票代码/股票名称”下输入股票代码,等到所有东西弹出并选择第一项
- 在标题类别和文件类型下,选择“标题类别”->“公告及通告”->“新上市(上市发行人/新申请人”)->“配发结果”
- 点击“搜索按钮”打开新页面
- 点击“公告及通告 - [配发结果]”下的链接
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox(executable_path = "C:\Program Files\Mozilla Firefox\geckodriver.exe")
driver.implicitly_wait(5)
driver.get("https://www1.hkexnews.hk/search/titlesearch.xhtml")
wait = WebDriverWait(driver, 5)
wait.until(EC.element_to_be_clickable((By.ID, "searchStockCode"))).send_keys("01156)
????
解决方案
有 3 到 4 个下拉菜单,在其中一个下拉菜单中我们必须向下滚动,我在 chrome 上尝试了以下代码,似乎工作正常。
示例代码:
driver = webdriver.Chrome(driver_path)
driver.maximize_window()
driver.implicitly_wait(30)
driver.get("https://www1.hkexnews.hk/search/titlesearch.xhtml")
wait = WebDriverWait(driver, 20)
wait.until(EC.element_to_be_clickable((By.ID, "searchStockCode"))).send_keys("01156")
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='slimScrollDiv']/descendant::tbody/tr[1]"))).click()
#first drop down
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "ALL"))).click()
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Headline Category"))).click()
#Second,3rd, 4th drop down
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "ALL"))).click()
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Announcements and Notices"))).click()
ele = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.droplist-group.droplist-submenu.level2")))
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", ele)
i = 1
for item in driver.find_elements(By.XPATH, "//li[@class='droplist-item droplist-item-level-2']"):
ActionChains(driver).move_to_element(driver.find_element_by_xpath(f"(//li[@class='droplist-item droplist-item-level-2'])[{i}]")).perform()
i = i + 1
if item.text == "New Listings (Listed Issuers/New Applicants)":
item.click()
break
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Allotment Results"))).click()
#Search
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "SEARCH"))).click()
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
推荐阅读
- r - 检查某些特定月份是否位于 data.table 的两个日期列之间
- python - 根据python中的条件值在行中插入数据
- php - React:重定向到子域时保留 cookie
- azure - 如何向 IOTCentral 报告遥测数据?
- php - 如何使用 HTML 表单将动态选项发布到 php 脚本?
- javascript - 有没有可能使用 .reduce()、.map()、.filter() 方法对该数组进行排序?
- python - 逻辑错误?Python 错误捕获和变量
- javascript - React Drag and Drop - react-dnd - 使组件同时可拖放(应用两个角色 - 拖放)
- android - Cordova webview 上不显示 Adsense 广告
- java - 如何在张海的 MaterialRatingBar 库中更改星星的颜色我找不到方法?