鱼C论坛

 找回密码
 立即注册
查看: 1966|回复: 11

[已解决]用playwright填了一个文本框,怎么搞 回车换行都出不来

[复制链接]
发表于 2023-10-23 17:46:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 blackantt 于 2023-10-24 10:55 编辑

page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi " + "\00000a   Nice to meet you." )
or
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi " + "<br>   Nice to meet you." )
or
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi " + <br> + "   Nice to meet you." )
or
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi " + "\n   Nice to meet you." )

最后,网站上都变成1行了,  回车出不来!  

但inspect检查同样成功能显示回车的行,却就是 <br> 。 为啥自己填的 <br> 不能换行呢?

成功的方法之一:
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("hello {}".format(name1))
page1.keyboard.type('\nnice to meet you\nJerry')

fill方法可能需要一个locator, 第1个fill用了后,第2句再用同样locator的fill的话,可能前面的内容就没了。
所以后续用不要locator的type来追加内容
最佳答案
2023-10-23 18:32:46
blackantt 发表于 2023-10-23 18:27
手动过程是, 先输入第一行文字,再按键盘上的 enter,再输入第2行文字。 最后点击 输入框  外的 “send ...

enter键试试用pyautogui看看:

先安装 pyautogui: pip install pyautogui
import pyautogui

# 模拟按下Enter键
pyautogui.press('enter')

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-23 17:47:04 | 显示全部楼层
playwright库的fill方法实际上是模拟用户输入文本,它不会解释HTML标签。要在文本框中强制换行,可以尝试使用press方法来模拟按下回车键。以下是一个示例代码:
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi")
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").press("Enter")
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Nice to meet you.")

这样,你在填写文本框时就会先输入"Hi",然后按下回车键,再输入"Nice to meet you."。
请注意,本回答来自GPT-3.5
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-23 17:47:13 | 显示全部楼层
在使用Playwright填写文本框时,如果想要实现回车换行的效果,可以尝试使用HTML中的换行符 <br> 或者Unicode字符 \n 。然而,根据你提供的代码和描述,似乎这些方法都没有生效。

这可能是因为填写的文本框是一个富文本编辑器,它可能会对输入的内容进行处理,将HTML标签转义为实体字符。所以,尽管你尝试使用 <br> 或 \n ,但最终在网站上显示的是被转义后的实体字符,而不是换行符。

为了解决这个问题,你可以尝试使用一下方法:

1. 使用 page.keyboard.press('Enter') 来模拟按下回车键:
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi ")
page1.keyboard.press('Enter')
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Nice to meet you.")

2. 使用 page.keyboard.type('\n') 来输入换行符:
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi ")
page1.keyboard.type('\n')
page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Nice to meet you.")

这些方法会模拟真实的键盘操作,可以更好地处理回车换行的情况。希望对你有帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-23 17:47:53 | 显示全部楼层
在使用 Playwright 填充文本框时,你可以尝试使用 HTML 实体字符来表示换行符和空格。以下是几种可能的方法:

1. 使用 \n :这是 JavaScript 中表示换行符的转义序列,你可以在填充文本框的时候加入 \n 来实现换行。例如:
page.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi\nNice to meet you.")
2. 使用 <br>:在 HTML 中,<br> 元素表示换行,你可以在填充文本框时使用 <br> 来实现换行。例如:
page.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi<br>Nice to meet you.")
3. 使用 \r\n :有些情况下,需要使用回车和换行的组合 \r\n 来实现换行效果。例如:
page.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("Hi\r\nNice to meet you.")
请注意,不同的应用程序或网页可能对换行符的处理方式不同。如果以上方法仍然无法实现预期的换行效果,可能是因为网站本身对输入进行了处理或过滤。在这种情况下,你可以尝试将文本输入为纯文本而不是 HTML,或者查看网站的文档或 API,了解如何正确插入换行符。

另外,确保使用正确的 CSS 选择器定位到文本框元素,以确保填充操作能够准确执行。

希望这些方法能够帮助你解决问题!如果还有其他疑问,请继续提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-23 18:12:23 | 显示全部楼层
isdkz 发表于 2023-10-23 17:47
在使用Playwright填写文本框时,如果想要实现回车换行的效果,可以尝试使用HTML中的换行符  或者Unicode字 ...

上面2种方法,最后都只有最后1行填进去了。第1行的 hi  不见了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-23 18:13:27 | 显示全部楼层
陶远航 发表于 2023-10-23 17:47
playwright库的fill方法实际上是模拟用户输入文本,它不会解释HTML标签。要在文本框中强制换行,可以尝试使 ...

只有最后1行填进去了。第1行的 hi  不见了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-23 18:15:43 | 显示全部楼层
blackantt 发表于 2023-10-23 18:12
上面2种方法,最后都只有最后1行填进去了。第1行的 hi  不见了

你的文本框是可以输入多行的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-23 18:27:29 | 显示全部楼层
isdkz 发表于 2023-10-23 18:15
你的文本框是可以输入多行的吗?

手动过程是, 先输入第一行文字,再按键盘上的 enter,再输入第2行文字。 最后点击 输入框  外的 “send” 按钮。  这种出来是正常的2行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-23 18:32:46 | 显示全部楼层
isdkz 发表于 2023-10-23 18:15
你的文本框是可以输入多行的吗?

自动记录出来的代码  page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("hello\n&#160; nice to meet you") 是正常的

但因为在 hello后要加变量  fill("hello" + name + "\n&#160; nice to meet you")  这种就不行了,就又成了1行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-23 18:32:46 | 显示全部楼层    本楼为最佳答案   
blackantt 发表于 2023-10-23 18:27
手动过程是, 先输入第一行文字,再按键盘上的 enter,再输入第2行文字。 最后点击 输入框  外的 “send ...

enter键试试用pyautogui看看:

先安装 pyautogui: pip install pyautogui
import pyautogui

# 模拟按下Enter键
pyautogui.press('enter')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-24 09:27:49 | 显示全部楼层
isdkz 发表于 2023-10-23 18:32
enter键试试用pyautogui看看:

先安装 pyautogui: pip install pyautogui

是不是跟 set_content 有关
set.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-24 10:19:54 | 显示全部楼层
isdkz 发表于 2023-10-23 18:32
enter键试试用pyautogui看看:

先安装 pyautogui: pip install pyautogui

以下组合终于搞定了,再精简一下就成了。 谢谢

page1.frame_locator("#emailMessage_ifr").locator("#tinymce").fill("hello {}".format(name1))
                pyautogui.press('enter')
                page1.keyboard.type('\n')
                page1.keyboard.type('nihao')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 13:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表