Python使用Selenium执行Javascript处理h-captcha时引号语法错误求助
错误原因
报错确实由引号嵌套冲突导致:你构造的JS代码中,XPath路径//textarea[@name="h-captcha-response"]外层已经用了双引号包裹,内部@name的属性值又用了双引号,JS解析时会提前截断字符串,导致语法结构断裂,抛出括号缺失的错误。
之前操作g-recaptcha的代码无报错,是因为getElementById的参数只有一层双引号,不存在嵌套冲突。
修复方案
方案1:直接调整引号嵌套(快速修复)
区分不同层级的引号即可,Python侧的字符串、JS侧的XPath外层、XPath内部属性值分别使用不同类型的引号,避免冲突:
insert_solver = 'document.getElementByXpath(\'//textarea[@name="h-captcha-response"]\').innerHTML="' + value + '";' driver.execute_script(insert_solver)
方案2:参数传递(更稳妥,避免value含特殊字符报错)
直接通过execute_script的参数传递验证码值,无需手动处理任何转义,同时兼容value本身含单/双引号、换行符等特殊字符的场景,另外替换非标准的getElementByXpath为标准DOM方法,兼容性更强:
insert_solver = ''' // 使用标准document.evaluate方法解析XPath const targetEle = document.evaluate( '//textarea[@name="h-captcha-response"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; targetEle.innerHTML = arguments[0]; ''' # 验证码值通过参数传入,无需处理转义 driver.execute_script(insert_solver, value)
内容的提问来源于stack exchange,提问作者V-cash
相关产品推荐
相关产品推荐

