You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium Webdriver选择Dropdown下拉值出现交互异常如何解决

提问内容

自我介绍

两年前我发掘了自己对编程的热爱,编程十分有趣,我非常喜欢!我最开始学习的是VBA,之后转向Python。目前我正在参加Python课程,同时阅读了大量相关资料,如果大家有优质的学习读物推荐,我非常乐意接收。可以看出我在编程领域还是新人。

我的问题

我正在开发一款网页爬虫,需要遍历多个页面采集信息。目前信息采集功能运行正常,但无法切换到下一页。我做了简单的调试也查阅了相关资料,仍旧无法独自解决这个问题,希望能获得帮助。
页面底部有一个用于选择页码的下拉菜单,我遇到的问题就是无法通过该下拉菜单选择对应页面跳转。页面没有直接的下一页跳转入口,只能在下拉菜单中选择页码,下拉菜单的HTML结构如下:

<select name="page" id="page" onchange="getApi('ispagination')">
<option selected="" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>

尝试方案1

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time

driver = webdriver.Safari()
driver.get("https://cnft.tools/lunars")
time.sleep(2)

dropdown = driver.find_element(By.XPATH, '//*[@id="page"]')
next_site =driver.find_element(By.XPATH, '//*[@id="page"]/option[2]')

print("Element dropdown is visible? " + str(dropdown.is_displayed()))
print("Element next_site is visible? " + str(next_site.is_displayed()))
print(next_site.text)
print(dropdown.text)

drp = Select(dropdown)
drp.select_by_visible_text("2")

输出结果:

Element dropdown is visible? True
Element next_site is visible? True
2
12345678910111213141516171819202122232425262728293031323

Selenium.common.exceptions.ElementNotInteractableException: Message: none

我查阅资料得知该错误通常在元素不可见时触发,但调试结果显示元素是可见的,我也可以成功定位到第2页对应的option元素。

尝试方案2

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time

driver = webdriver.Safari()
driver.get("https://cnft.tools/lunars")
time.sleep(2)

dropdown = driver.find_element(By.XPATH, '//*[@id="page"]')
next_site =driver.find_element(By.XPATH, '//*[@id="page"]/option[2]')

print("Element dropdown is visible? " + str(dropdown.is_displayed()))
print("Element next_site is visible? " + str(next_site.is_displayed()))
print(next_site.text)
print(dropdown.text)

actions = ActionChains(driver)
actions.move_to_element(dropdown).click().perform()

输出结果:

Element dropdown is visible? True
Element next_site is visible? True
2
12345678910111213141516171819202122232425262728293031323

selenium.common.exceptions.MoveTargetOutOfBoundsException: Message: None

我查阅资料得知该问题也可能在元素不可见时出现,但检测结果显示元素确实是可见的,请问该如何解决这个问题?


解决方案

问题原因

报错来自两个核心诱因:

  • 下拉框位于页面底部,未滚动到视口范围内时,即使is_displayed()返回True,ActionChains的移动和点击操作也会触发越界错误
  • Safari webdriver对原生<select>标签的Select类操作存在兼容性缺陷,尤其是绑定了自定义onchange事件的场景

最优实现代码

直接通过JS操作元素属性和触发事件,绕过前端交互限制,兼容性更强:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Safari()
driver.get("https://cnft.tools/lunars")
time.sleep(2)

# 定位下拉框元素
dropdown = driver.find_element(By.ID, "page")
# 滚动到元素位置,确保在视口范围内
driver.execute_script("arguments[0].scrollIntoView();", dropdown)
time.sleep(0.5)
# 修改下拉框value为目标页码,手动触发onchange跳转事件
target_page = 2
driver.execute_script(f"arguments[0].value = '{target_page}'; arguments[0].onchange();", dropdown)

补充说明

该方案不需要展开下拉框、点击选项等交互操作,直接修改元素属性触发绑定的跳转逻辑,不会出现交互类异常。如果需要遍历所有页码,只需要循环修改target_page的取值即可。


内容的提问来源于stack exchange,提问作者Biotonne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:45:03