为啥它不会将_keys 发送到评论框?

Posted

技术标签:

【中文标题】为啥它不会将_keys 发送到评论框?【英文标题】:Why won't it send_keys to the comment box?为什么它不会将_keys 发送到评论框? 【发布时间】:2019-05-06 22:55:25 【问题描述】:

我正忙于创建一个 Instagram 机器人,它会自动对我的 Instagram 供稿中的帖子发表评论。问题是当我尝试将_keys 发送到评论框时它不起作用。我设置了登录屏幕来发送密钥,它运行良好,但为什么这一步不起作用?

这是我的代码:

def send_comment(self):


    self.browser.get('https://www.instagram.com/')
    actionChain = webdriver.ActionChains(self.browser)

    comment = self.browser.find_elements_by_css_selector('form input')[0]

    comment.send_keys("Great")
    comment.send_keys(Keys.ENTER)
    print('sent comment')

这是出现的错误: selenium.common.exceptions.WebDriverException: Message: invalid argument: File not found : Great 所以我认为它可能正在寻找文件路径。我创建了一个文本文档,其中包含我想提交的评论,括在括号内(标准 Python 格式)。以这种格式: comment.send_keys("C:/Users/bbrown/Desktop/comment_doc.txt")

但是,现在这给了我一个不同的错误: selenium.common.exceptions.WebDriverException: Message: invalid argument: 在打开 Instagram 的网络浏览器上,它会在尝试运行该部分代码时显示一条消息。 “上传失败。只能上传图片。”。所以我不相信这是正确的格式。我哪里错了?任何帮助都会很棒!

【问题讨论】:

似乎是您指向错误的元素。您是否在开发工具中检查了 css。 “开发工具”是什么意思?我通过 chrome 检查 html 源代码,它指向一个 您可以尝试将线路更改为comment = self.browser.find_element_by_css_selector('form input:nth-of-type(1)')。尝试添加预期条件以确保该元素已加载到页面上。 开发工具,正如@supputuri 所提到的,是一个包含在 FF 或 Chrome(和其他)中的工具,可以帮助您检查 HTML 的代码,它允许您在页面上执行一些 javascript 命令.了解它是必不可少的。请看:developers.google.com/web/tools/chrome-devtools 【参考方案1】:

在使用 Selenium 时应该记住一些事情,比如等待一段时间。 Selenium 代码将执行得非常快,但是当您必须在元素上找到网页时,这将取决于 Internet 的速度和您的硬件。因此,为避免“没有这样的元素”错误,您应该包含 sleep()wait 命令直到某个元素可见。我更喜欢使用time.sleep(time_amount_in_sec)。 如果您在谈论评论部分,请务必在开始发送密钥之前单击它以避免错误。 here 描述了一个非常相似的机器人。

代码中的一个 sn-p 是:

def comment(i):
    list1=["niceeee ","aweeesome ","supeeerr ","cooool "]
    list2=[":)", ";)",":o"]

    p=random.randint(0,3)
    q=random.randint(0,2)

    paste=list1[p]+list2[q]

    a=br.find_element_by_class_name('_b6i0l').click()
    time.sleep(1.85)
    b=br.find_element_by_xpath("//*[@class='_bilrf']")
    b.send_keys(paste)
    b.send_keys(Keys.ENTER)
    time.sleep(2)
    with open('commented.txt','a') as f:
        x=str(i)
        f.write('%s\n'%x)

    return()

希望对您有所帮助。

注意- 这是旧的,因此请尝试相应地更改类,因为它们经常更改网站类。

【讨论】:

以上是关于为啥它不会将_keys 发送到评论框?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 PHP 电子邮件脚本不会发送到我的 Yahoo 电子邮件?

用于将用户发送到设备应用商店的应用评论页面的网址

使用 JavaScript Fetch 和 POST 发送表单数据,然后在 PHP 中处理它

为啥我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为啥 NSDictionary 正在转换?

为啥我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为啥 NSDictionary 正在转换?

将字符串从 C# 发送到 C++ dll 文件