方法一:
target_element = driver.find_element(By.CLASS_NAME, "lb-btn-p-primary") actions = ActionChains(driver)
模拟真实的移动轨迹,逐步移动到目标位置
for i in range(20):
# 每次移动10个像素,模拟真实移动轨迹
actions.move_by_offset(5, 5).perform()
# 暂停一小段时间,使得移动更加自然
time.sleep(0.02)
移动到目标元素
actions.move_to_element(target_element)
执行点击操作
actions.click()
执行所有累积的操作
actions.perform()
方法二 - JS法:
def move_to_element_with_javascript(driver, element):
# 获取元素的位置
element_location = element.location
x = element_location['x']
y = element_location['y']
# 使用JavaScript来模拟更自然的移动
# 这里仅作为示例,实际中可能需要根据页面具体情况进行调整
javascript_code = f"""
var target = arguments[0];
var rect = target.getBoundingClientRect();
var targetX = {x} + rect.width / 2;
var targetY = {y} + rect.height / 2;
var currentX = window.pageXOffset + document.documentElement.clientWidth / 2;
var currentY = window.pageYOffset + document.documentElement.clientHeight / 2;
var stepX = (targetX - currentX) / 5;
var stepY = (targetY - currentY) / 5;
function step() {{
if (Math.abs(targetX - currentX) < 3 && Math.abs(targetY - currentY) < 3) {{
window.scrollTo(targetX - rect.width / 2, targetY - rect.height / 2);
return;
}}
currentX += stepX;
currentY += stepY;
window.scrollTo(currentX, currentY);
requestAnimationFrame(step);
}}
step();
"""
driver.execute_script(javascript_code, element)
time.sleep(random.uniform(0.2, 2))
driver.execute_script("arguments[0].click();", element)
以上两种方法都会移动过去并且点击
收起