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 导航分隔线无法在谷歌浏览器上正常工作

Flash 按钮无法正常工作

Twitter 登录工作正常,但不断抛出错误,要求提供 API 密钥

Instagram登录脚本与selenium,无法执行.send_keys('test')

引导程序“下拉打开”切换在开发中无法正常工作,但在生产中有效

Twitter bootstrap typeahead 不能与 data-source 属性一起正常工作