【问题标题】:Fill textarea with the bb code in Selenium python用 Selenium python 中的 bb 代码填充 textarea
【发布时间】:2020-03-04 00:15:32
【问题描述】:

我正在为论坛创建一个测试,我想测试论坛 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)

我收到了这个错误

Traceback(最近一次调用最后一次):文件“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 中 引发异常类(消息,屏幕,堆栈跟踪) selenium.common.exceptions.WebDriverException:消息:未知错误: Runtime.evaluate 抛出异常:SyntaxError: Invalid or unexpected 令牌(会话信息:chrome=70.0.3538.77)(驱动程序信息: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),平台=Linux 4.15.0-66-通用 x86_64)

但是当我使用简单的文本时效果很好。那么如何在论坛中添加 BB CODE 来测试它是否正在使用 selenimum。

【问题讨论】:

  • 您将代码放在' ' 中的innerHTML='...' 中,但在BB 代码中,您在[URL='https:///coral-lps-6/'] 中也有' - 也许它会产生问题。它可以创建不正确的 JavaScript 代码。也许您应该在innerHTML="..." 或BB 代码中使用" "
  • 这是无用的r"{}".format(bb_code),因为它不会向bb_code 添加任何内容 - 它不会将" " 添加到代码中。

标签: python selenium selenium-webdriver


【解决方案1】:

我猜。

您将代码放在' ' 中的innerHTML='...' 中,但在BB 代码中,您在[URL='https:///coral-lps-6/'] 中也有',这可能会产生问题。它可以创建不正确的 JavaScript 代码,例如

'code'https:///coral-lps-6/'code'

可以看作三个元素

'code' https:///coral-lps-6/ 'code'

也许您应该在innerHTML="..." 或BB 代码中使用" "

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)

【讨论】:

  • 我在 Firefox 中打开了 DevTools 并将 BB 代码放入 JavaScript 控制台 - 如果代码在 ' ' 中(并且都在一行中),那么我得到了意外的令牌,但是当我将代码放入" " 然后就可以了。它将它视为一个字符串。也许它必须在一行中
  • 那么我应该在哪里更改 ' ?这里? 'arguments[0].innerHTML = "{}"'.format(code)
  • 这应该会创建正确的代码。如果您在多行中有 BB 代码,则将所有代码放在一行中或在行尾使用 `` 通知 JavaScript 下一行是当前行的延续。
  • 我编辑了代码并在BB代码中添加了``。 JavaScript 应该将其视为它不是字符串结尾的信息。或者甚至 Python 也应该用 BB 代码创建一行。
  • 我添加了代码,用于将 BB 代码放在当前页面的文本区域中 - 对于此页面,它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多