Python Selenium send_keys()传URL时正斜杠丢失如何解决
问题原因
这个正斜杠丢失和字符串转义没有任何关系,你之前尝试的replace转义思路完全是错的——转义规则是给代码语法解析层用的,而send_keys的逻辑是模拟真实物理键盘的按键派发事件,你给字符串加反斜杠最后只会在输入结果里多出无意义的反斜杠,解决不了斜杠丢失的问题。
这个问题是Selenium搭配高版本Chromium内核浏览器(Chrome/Edge 110+)的常见兼容bug:直接在send_keys里传入包含/的整段字符串时,斜杠对应的按键事件没有携带正确的keyCode,很多自定义封装的输入组件、带输入校验的输入框会直接把这种非法按键事件过滤掉,最终就得到所有斜杠都消失的错误字符串。
可落地解决方案
按稳定性从高到低排序:
- 优先用JS注入赋值绕过键盘模拟,完全规避按键派发的兼容问题,100%不会出现字符丢失。注意赋值后必须手动派发事件,不然前端框架的双向绑定逻辑捕获不到值变化。
# 定位到目标输入框 input_ele = driver.find_element(By.ID, "你的输入框定位属性") target_url = "https://www.test.com/downloads/myfile.zip" # 执行JS赋值 driver.execute_script(""" const el = arguments[0], val = arguments[1]; el.value = ""; el.value = val; el.dispatchEvent(new Event('input', {bubbles: true})); el.dispatchEvent(new Event('change', {bubbles: true})); """, input_ele, target_url)
- 如果目标站点有强行为校验,会拦截JS直接赋值的操作(比如部分风控场景、云盘类站点的URL输入框),就改用逐字符输入的逻辑,遇到斜杠时不要直接传字符串形式的
/,改用Selenium内置的Keys.DIVIDE(对应数字小键盘的除号键,和斜杠输入映射一致,keyCode能被正常识别)。
from selenium.webdriver.common.keys import Keys input_ele = driver.find_element(By.ID, "你的输入框定位属性") target_url = "https://www.test.com/downloads/myfile.zip" input_ele.click() input_ele.clear() for c in target_url: if c == "/": input_ele.send_keys(Keys.DIVIDE) else: input_ele.send_keys(c)
- 先排查基础环境问题:确认你使用的浏览器驱动(chromedriver/msedgedriver)和本地浏览器的大版本号完全一致,版本差超过2个小版本时,会出现大量按键事件派发异常的问题,更新匹配版本的驱动后,部分场景下直接传整串URL也不会丢斜杠。
不要尝试任何字符串层面的斜杠转义操作,这类操作只会让最终输入的URL带上多余的反斜杠,完全不符合URL格式规范。
内容的提问来源于stack exchange,提问作者hellojoshhhy
相关产品推荐
相关产品推荐

