Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium与Python:Newline与Shift+;输入可以工作,但会弄乱文本_Python_Selenium - Fatal编程技术网

Selenium与Python:Newline与Shift+;输入可以工作,但会弄乱文本

Selenium与Python:Newline与Shift+;输入可以工作,但会弄乱文本,python,selenium,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 monte

我正在尝试自动发送消息,因此我需要转到一个换行符,我使用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()
我应该得到的输出是:

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.
但我得到的结果更像是:

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.
有什么想法吗?提前谢谢


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

您可以使用webelements直接发送字符串。首先,您需要找到要在其中传递字符串的元素,然后直接向其发送字符串

例:


如果对你有用,请现在告诉我

字符串由
换行符
拆分,因此必须使用额外的换行符对其进行增强

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('/home/stefan/Downloads/chromedriver')
driver.get("https://pastebin.com/")
text_area = driver.find_element_by_id("postform-text")

string = "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'):
        print(part)
        text_area.send_keys(part)
        text_area.send_keys(Keys.ENTER)
                      
#action.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.ENTER).key_up(Keys.SHIFT).perform()
            
driver.close()
我得到的结果是:

更新-作为单个消息发送 如果你想把它作为一个单一的消息发送,那么你就不必拆分它

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('/home/stefan/Downloads/chromedriver')
driver.get("https://pastebin.com/")
text_area = driver.find_element_by_id("postform-text")

string = "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."

# send as single message
text_area.send_keys(part)
text_area.send_keys(Keys.ENTER)
 
driver.close()
更新2-特别针对信使 如果我是对的,您希望按多个键以在messenger中获得新行,因此您可以尝试
text_区域。发送_键(keys.SHIFT+keys.ENTER)。执行()


与此同时,我已经用一种可怕的、不可伸缩的方式完成了这项工作,但现在它完成了这项工作

代码如下:

one = 'Lorem ipsum dolor sit amet'
two = 'Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.'
last = 'PS: Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.'

action = ActionChains(browser)
def newline():
    action.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.ENTER).key_up(Keys.SHIFT)

action.send_keys(one)
newline()
action.send_keys(two)
newline()
newline()
action.send_keys(last)
action.perform()
我不会接受这个答案,因为它非常糟糕,所以如果有人想给出更好、更清晰的答案,我完全欢迎。

您必须重置操作以删除内存中的操作,否则在执行操作时,它也会重复前面的操作: 如果您使用的是selenium v3: 有两种解决方案:

第一个:

在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()
这将重置操作顺序

第二次接近:

为此,在操作链中有reset_actions()方法,但有一个:

因此,请使用以下方法:

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()
如果您使用的是selenium v4: 该错误已修复:

要安装selenium v4:
pip安装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()

谢谢你的回答,但我的问题是我有一个换行符“\n”。但由于该网站是messenger.com,当它访问到该角色时,它也会发送自那时以来所写的内容。我的目标是编写一条包含换行符的消息。您是对的,因为您是在文本编辑器中编写的,但我的目标是在messenger.com中编写,因此Keys.ENTER只需发送消息即可。我想要一条带有换行符的消息(因此必须用SHIFT+ENTER完成)@Benjaminboafa你能试试上一次更新吗,我想这应该适用于你的情况。最后一个只是简单地发送消息。我在我的问题中引用的帖子的答案是为了换一行,但它会造成文本的混乱。我的意思是:它只是在每一个“部分”之后发送消息=>你在使用哪个网站?它在@PDHide上运行良好我正在messenger上使用它
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()
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()