我有时使用 ActionsChains 时遇到任何问题,今天它不起作用,你知道为什么吗?
scrolling_bar = driver.find_element(By.CSS_SELECTOR, "#scrolling_bar")
start = scrolling_bar.location
ActionChains(driver)\
.drag_and_drop_by_offset(scrolling_bar, start['x'], start['y'] - 1000)\
.perform()
print('This message never be said')
ActionChains(driver).reset_actions()
操作已执行,但停止了我的程序
你的代码问题在于你试图将滚动条拖放到它已经所在的位置。
start['x']
和
start['y']
已经代表了滚动条的当前位置。当你使用
drag_and_drop_by_offset
并使用相同的
x
和
y
坐标时,你实际上并没有移动滚动条。
这可能会导致 Selenium 和 Firefox 之间出现意外的行为,最终导致你的程序停止响应。
为了解决这个问题,你需要
修改拖放操作的目标位置
。与其使用
start['x']
和
start['y']
,不如计算出一个新的目标位置:
scrolling_bar = driver.find_element(By.CSS_SELECTOR, "#scrolling_bar")
start = scrolling_bar.location
# 计算新的目标位置
target_x = start['x'] # 可以保持不变,因为我们只想垂直滚动
target_y = start['y'] - 1000 # 向上滚动 1000 像素
ActionChains(driver) \
.drag_and_drop_by_offset(scrolling_bar, target_x, target_y) \
.perform()
print('This message should now be printed')
ActionChains(driver).reset_actions()
在这个修改后的代码中:
-
我们使用
start['x']
作为target_x
,因为我们只希望垂直滚动。 -
我们从
start['y']
中减去1000
,将滚动条向上移动1000
像素。
通过更改目标位置,你应该能够避免程序停止响应,并且滚动条应该会按预期移动。
其他建议:
- 确保你的滚动条元素确实可以通过拖放来滚动。有些滚动条可能需要使用 JavaScript 或其他方法来控制。
-
可以尝试使用
move_to_element()
和click_and_hold()
等其他 ActionsChains 方法来模拟滚动条的拖动操作,看看是否能解决问题。
希望这些信息能够帮助你解决问题!
标签:python,selenium-webdriver,firefox From: 78797006