send_keys 无法正常工作(Twitter 使用 Selenium 自动发送消息)
Posted
技术标签:
【中文标题】send_keys 无法正常工作(Twitter 使用 Selenium 自动发送消息)【英文标题】:send_keys doesn't work properly (Twitter automate send message with Selenium) 【发布时间】:2022-01-14 20:14:57 【问题描述】:谢谢你们帮助我。
目前我正在为 Twitter 做一个 selenium 自动发送消息。 这是 html DOM 结构:
所以我将文本框输入提取为:
def try_input(driver: WebDriver, msg: str, element: WebElement = None):
textbox_xpath = "//div[@data-testid='dmComposerTextInput'and @role='textbox']"
selector = element if element else driver.find_element_by_xpath(textbox_xpath)
try:
selector.send_keys(msg.encode("utf-8"))
return True
except Exception as e:
try:
selector.send_keys(msg.decode("utf-8"))
return True
except Exception as e:
try:
for m in msg.split('\n'):
selector.send_keys(" ")
time.sleep(uniform(0.2, 0.6))
selector.send_keys(m)
action = ActionChains(driver)
action.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.ENTER).key_up(Keys.SHIFT).perform()
return True
except Exception as e:
pass
return False
例如我放了一些带有换行符(\n)的文本:
Hello this is example text
This is my first time use this selenium
Hope you guy helping me.
正如您在此处看到的,这是helping me.
中缺少的一些字符,并且文本框中没有换行符。
这就是它在文本框中的样子,但是当我点击发送时,这个内容是完整而准确的。 (没有丢失字符并且有换行符)
这是非常奇怪的行为,因为我有一个功能可以在实际发送之前仔细检查内容(点击发送)=>我检查了文本框中的内容消息,然后与我用来发送的内容进行比较
=> 不一样(因为缺少一些字符)
=> 所以我的问题是:如何使用<div contenteditable='true'>
准确处理和发送消息
【问题讨论】:
获取//div[@data-testid='dmComposerTextInput'and @role='textbox']
元素的先决条件是什么?它没有出现在 Twitter 主页上
尝试使用 send_keys(Keys.SHIFT + Keys.ENTER):selenium-python.readthedocs.io/…
@Prophet 当我得到这个元素时,我在 Twitter 消息页面。所以它已经存在了。
@pcalkins,我试过了,但它仍然没有在浏览器中换行(用于可视化),但它确实有(点击发送消息时)
@DFXNguyễn 我的回答有帮助吗?
【参考方案1】:
不要使用 Selenium 驱动程序 send_keys
方法发送文本,而是尝试使用 Actionchains
send_keys
发送文本。
像这样的:
selector = element if element else driver.find_element_by_xpath(textbox_xpath)
actions = ActionChains(driver)
actions.move_to_element(selector)
actions.click()
actions.send_keys(msg)
actions.perform()
【讨论】:
以上是关于send_keys 无法正常工作(Twitter 使用 Selenium 自动发送消息)的主要内容,如果未能解决你的问题,请参考以下文章
Twitter Bootstrap 导航分隔线无法在谷歌浏览器上正常工作
Twitter 登录工作正常,但不断抛出错误,要求提供 API 密钥
Instagram登录脚本与selenium,无法执行.send_keys('test')