python - 如何通过 Python Selenium 选择下拉菜单中的 href 选项?

标签 python selenium web-scraping

我正在尝试构建一个简单的抓取工具来加载三个不同区域(在下拉值内)的位置地址,然后将所有这些地址复制为文本。我已经设法使用 python Selenium 在 Chrome 中加载网站并单击链接(每次加载网站时都会有一个动态数字发生变化。现在它说 2801157,但每次都会改变)。但单击下拉菜单后,我不知道为什么我无法单击这些选项值(即一次单击“li”内的香港岛、九龙、新界)。隐藏的html部分位于许多div下;相关部分如下:

<div class="hkoutlettop_select">
  <select name="" class="hkoutlet_select selDistrict" tabindex="1" sb="28011577" style="display: none;">
    <option value="Hong Kong Island">Hong Kong Island</option>
    <option value="Kowloon">Kowloon</option>
    <option value="New Territories">New Territories</option>
  </select>
  <div id="sbHolder_28011577" class="sbHolder" tabindex="1">
    <a id="sbToggle_28011577" href="#" class="sbToggle sbToggleOpen"></a><a id="sbSelector_28011577" href="#" class="sbSelector">Hong Kong Island</a>
    <ul id="sbOptions_28011577" class="sbOptions" style="top: 22px; max-height: 715px;">
      <li><a href="#Hong Kong Island" rel="Hong Kong Island" class="">Hong Kong Island</a></li>
      <li><a href="#Kowloon" rel="Kowloon" class="">Kowloon</a></li>
      <li><a href="#New Territories" rel="New Territories" class="">New Territories</a></li>
    </ul>
  </div>
</div>

这是我的代码

# loading Chrome browswer, add useragent options
driver = webdriver.Chrome(chrome_options=options)

# wait a random amount of seconds. random_time is a list of integers
driver.implicitly_wait(random_time)

# the restaurant's website
driver.get(url)

# This gets the dynamic id
WebElement_Dynamic_ID_selector = driver.find_element_by_class_name("sbSelector").get_attribute("id")

# This gets the dynamic id, not sure if I need to do this though
WebElement_Dynamic_ID_options = driver.find_element_by_class_name("sbOptions").get_attribute("id")

# select dropdown once it is available
district_dropdown = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.ID, WebElement_Dynamic_ID_selector)))

# click dropdown
district_dropdown.click()

# wait for areas to show up
area_list_dropdown = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.ID,WebElement_Dynamic_ID_options)))

# I'm stuck

最佳答案

尝试使用以下解决方案:

driver.get(url)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "sbSelector"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "Kowloon"))).click()

关于python - 如何通过 Python Selenium 选择下拉菜单中的 href 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51320294/

相关文章:

firefox - Selenium 在 "Launching Firefox..."停止,没有错误或异常

python - HTTP 错误 999 : Request denied

css - Web 服务器在进行数据抓取时响应缓慢

python - Tkinter keyrelease 事件插入新行,而按键则不插入新行

python - 将 unhexlify 从 Python 2.7 移植到 Python 3.5

python - 多边形内的轮廓不规则数据

python - Web 抓取 LinkedIn 没有给我 html...。我做错了什么?

python - 字符串中的变量,python 2.7

java - 如何使用 Selenium 和 Java 在网页中定位 <image> 标签

java - AssertionError 空 Selenium 测试