首页 > 解决方案 > 用 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。

标签: pythonseleniumselenium-webdriver

解决方案


我会猜的。

您将代码放入其中' '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)

推荐阅读