python - 用 Selenium python 中的 bb 代码填充 textarea
问题描述
我正在为论坛创建一个测试,我想测试论坛 BB 代码。我有一个这样的BB代码,
[B][FONT=Trebuchet MS][SIZE=7]Meteor[/SIZE][/FONT][/B]
[COLOR=#000000][FONT=Verdana][I][B][SIZE=4]n: [/B][/I][/FONT]
[S][B][FONT=Verdana]ki[/SIZE][/FONT][/B][/S][/COLOR]
[URL='https:///coral-lps-6/']
[FONT=Impact][SIZE=7][COLOR=#F41600][U]CLICK HERE TO BUY![/U][/COLOR][/SIZE][/FONT][/URL]
我正在尝试使用以下方式将此代码填充到文本区域(包装在 p 标签中),
messageBox = self.browser.find_elements_by_css_selector('.message-editorWrapper p')[0]
code = r"{}".format(bb_code)
self.browser.execute_script("arguments[0].innerHTML = '"+code+"'", messageBox)
我收到此错误
回溯(最后一次调用):文件“login.py”,第 51 行,在 bot.postRequest() 文件“login.py”,第 31 行,在 postRequest self.browser.execute_script("arguments[0].innerHTML = '"+code+"'", messageBox) 文件 "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", 第 636 行, 在 execute_script 'args': convert_args}) ['value'] 文件“/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py”,第 321 行,在执行 self.error_handler.check_response(response) 文件“/usr /local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py",第 242 行,在 check_response 中引发 exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException:消息:未知错误:Runtime.evaluate 抛出异常:SyntaxError:无效或意外令牌(会话信息:chrome=70.0.3538.77)(驱动程序信息:chromedriver=73.0.3683.68(47787ec04b6e38e22703e856e101e840b65afe72),平台=Linux 4.15.0-66-generic x86_64)
但是当我使用工作正常的简单文本时。那么我如何在论坛中添加 BB CODE 来测试它是否正在使用 selenimum。
解决方案
我会猜的。
您将代码放入其中' '
,innerHTML='...'
但在您也放入的 BB 代码'
中[URL='https:///coral-lps-6/']
,它可能会产生问题。它可以创建不正确的 JavaScript 代码,例如
'code'https:///coral-lps-6/'code'
这可以被视为三个元素
'code' https:///coral-lps-6/ 'code'
也许您应该在 BB 代码" "
中或中使用。innerHTML="..."
js = 'arguments[0].innerHTML = "{}"'.format(code)
顺便说一句:r"{}".format(bb_code)
没用。它没有任何改变bb_code
。并且可以肯定它不会添加" "
到bb_code
. 您需要外部' '
添加" "
-r'"{}"'.format(bb_code)
编辑:因为 BB 代码在很多行中,所以它可能需要\
在行尾通知 JavaScript 它不是字符串的结尾。
bb_code = '''[B][FONT=Trebuchet MS][SIZE=7]Meteor[/SIZE][/FONT][/B]\
[COLOR=#000000][FONT=Verdana][I][B][SIZE=4]n: [/B][/I][/FONT]\
[S][B][FONT=Verdana]ki[/SIZE][/FONT][/B][/S][/COLOR]\
[URL='https:///coral-lps-6/']\
[FONT=Impact][SIZE=7][COLOR=#F41600][U]CLICK HERE TO BUY![/U][/COLOR][/SIZE][/FONT][/URL]'''
js = 'arguments[0].innerHTML = "{}"'.format(bb_code)
print(js)
self.browser.execute_script(js, messageBox)
编辑:这段代码对我有用。它将BB代码放在文本区域以在当前页面上进行回答。
import selenium.webdriver
driver = selenium.webdriver.Firefox()
driver.get('https://stackoverflow.com/questions/58748338/fill-textarea-with-the-bb-code-in-selenium-python/58748608')
messageBox = driver.find_element_by_id('wmd-input')
bb_code = '''[B][FONT=Trebuchet MS][SIZE=7]Meteor[/SIZE][/FONT][/B]\
[COLOR=#000000][FONT=Verdana][I][B][SIZE=4]n: [/B][/I][/FONT]\
[S][B][FONT=Verdana]ki[/SIZE][/FONT][/B][/S][/COLOR]\
[URL='https:///coral-lps-6/']\
[FONT=Impact][SIZE=7][COLOR=#F41600][U]CLICK HERE TO BUY![/U][/COLOR][/SIZE][/FONT][/URL]'''
js = 'arguments[0].innerHTML = "{}"'.format(bb_code)
#print(js)
driver.execute_script(js, messageBox)
推荐阅读
- html - 无法在同一行列出具体化 css 卡
- javascript - 如何在js中使用没有内置正则表达式的正则表达式?
- hdfs - GetHdfs 到 PutEmail 流 Apache NiFi
- angular - NGRX:http 重试拦截器导致不触发失败操作
- javascript - 反应谷歌图表 - 折线图样式
- python - 如何在带有圆形边框的opencv中模糊人脸 - Python?
- javascript - 无法设置 userNm 的属性未定义
- spring-batch - MultiResourceItemReader 将最后一个文件读取锁定,因此完成处理后无法移动
- javascript - 仅显示 SVG 的一半
- firebase - 我应该如何处理用户更改他们在 Firebase 存储中的头像?