Python中执行JS定位ID可变的HTML元素完成hCaptcha验证提交
解决方案
方案1:通过固定name属性定位(最推荐)
hCaptcha对应的textarea元素name属性固定为h-captcha-response,不受动态id影响,直接使用CSS选择器匹配即可,对应代码如下:
value = get_value() # 转义验证码值内的特殊字符,避免破坏JS语法 escaped_value = value.replace('"', '\\"').replace("'", "\\'") insert_solution = f'document.querySelector(\'textarea[name="h-captcha-response"]\').value = "{escaped_value}";' driver.execute_script(insert_solution)
提示:对表单元素赋值使用
value属性比innerHTML更规范,兼容性更好。
方案2:通过id前缀匹配定位
如果页面存在多个同name的textarea的特殊场景,可以匹配id前缀定位,所有动态生成的hCaptcha textarea的id均以h-captcha-response开头:
value = get_value() escaped_value = value.replace('"', '\\"').replace("'", "\\'") insert_solution = f'document.querySelector(\'textarea[id^="h-captcha-response"]\').value = "{escaped_value}";' driver.execute_script(insert_solution)
之前尝试失败的原因说明
document.getElementById()仅支持传入完整id字符串,不支持正则匹配,所以尝试正则匹配的方法无效document.getElementsByTagName()是复数写法(末尾带s),返回值为元素集合,需要指定下标才能获取到对应元素,直接赋值会报错。
内容的提问来源于stack exchange,提问作者V-cash
相关产品推荐
相关产品推荐

