Selenium 与 Python:使用 Shift+Enter 换行可以工作,但会弄乱文本

Ben*_*afa 2 python selenium

我正在尝试自动发送消息,因此我需要转到换行符,我通过使用 Shift+Enter 来完成此操作,如线程中的回答。

这是我的代码:

string = f"Lorem ipsum dolor sit amet\nconsectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.\n\nPS: Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus."
action = ActionChains(browser)
for part in string.split('\n'):
            action.send_keys(part)
            action.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.ENTER).key_up(Keys.SHIFT).perform()
Run Code Online (Sandbox Code Playgroud)

我应该得到的输出是:

Lorem ipsum dolor sit amet
consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.

PS: Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Run Code Online (Sandbox Code Playgroud)

但我得到的输出更像是:

Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet consectetuer adipiscing elit. Aenean commodo ligula eget Lorem ipsum dolor sit amet consectetuer adipiscing elit. Lorem ipsum dolor sit amet consectetuer adipiscing elit. Lorem ipsum dolor sit amet consectetuer adipiscing elit. Lorem ipsum dolor sit amet consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.  PS: Cum sociis natoque penatibus et magnis dis parturient montes, Lorem ipsum dolor sit amet consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.  PS: Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. nascetur ridiculus mus.
Aenean commodo ligula eget dolor. Aenean massa.  
Aenean commodo ligula eget dolor. Aenean massa. 
Aenean commodo ligula eget dolor. Aenean massa. 
dolor. Aenean massa.
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?提前致谢!!

编辑:对于更多上下文,我想在messenger.com中编写,因此我不能只执行Keys.ENTER,我必须执行SHIFT + ENTER

PDH*_*ide 5

您必须重置操作以删除内存中的操作,否则当您执行它时它也会重复以前的操作:

如果您使用的是 selenium v​​3:

有两种解决方案:

第一:

将操作声明移至 for 循环内:

for part in string.split('\n'):
    action = webdriver.ActionChains(driver)
    action.send_keys(part)
    action.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(
        Keys.ENTER).key_up(Keys.SHIFT).perform()
Run Code Online (Sandbox Code Playgroud)

这将重置操作顺序

第二种方法:

动作链中有一个reset_actions()方法用于此目的,但有一个错误:

https://github.com/SeleniumHQ/selenium/issues/6837

所以使用下面的方法:

for part in string.split('\n'):
    print(part)
    action.send_keys(part)
    action.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(
        Keys.ENTER).key_up(Keys.SHIFT).perform()
    action.w3c_actions.clear_actions()
    for device in action.w3c_actions.devices:
      device.clear_actions()
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 selenium v​​4:

该错误已修复:

安装硒 v4:pip install selenium==4.0.0.a7

for part in string.split('\n'):
    action.send_keys(part)
    action.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(
        Keys.ENTER).key_up(Keys.SHIFT).perform()
   action.reset_actions()
Run Code Online (Sandbox Code Playgroud)