Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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

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
在python中使用selenium将键发送到不起作用的文本区域_Python_Selenium_Selenium Webdriver_Web Scraping_Webdriver - Fatal编程技术网

在python中使用selenium将键发送到不起作用的文本区域

在python中使用selenium将键发送到不起作用的文本区域,python,selenium,selenium-webdriver,web-scraping,webdriver,Python,Selenium,Selenium Webdriver,Web Scraping,Webdriver,我试图通过制作一个进入instagram账户并在帖子上发表评论的机器人来学习selenium 这是我的代码: from selenium import webdriver from selenium.webdriver.common.keys import Keys site = webdriver.Edge('C:\\P\\Automation\\MicrosoftWebDriver') site.get('https://www.instagram.com/example_account/

我试图通过制作一个进入instagram账户并在帖子上发表评论的机器人来学习selenium

这是我的代码:

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

site = webdriver.Edge('C:\\P\\Automation\\MicrosoftWebDriver')
site.get('https://www.instagram.com/example_account/')

ref = site.find_element_by_xpath("//*[@id=\"reactroot\"]/section/main/div/div/article/div[1]/div/div[1]/div[1]/a")
site.get(ref.get_attribute('href'))

txt = site.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div/article/div[2]/section[3]/form/textarea')
txt.send_keys('test')
txt.send_keys(Keys.ENTER)
问题是当我向comment元素发送键时

<textarea aria-label="Add a comment…" placeholder="Add a comment…" class="Ypffh" autocomplete="off" autocorrect="off" style="height: 18px;"></textarea>
它给我一个错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 479, in send_keys
'value': keys_to_typing(value)})
  File "C:\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "C:\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "C:\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: Stale element reference
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python\Python37-32\lib\site packages\selenium\webdriver\remote\webelement.py”,第479行,位于发送键中
“值”:键到键入(值)})
文件“C:\Python\Python37-32\lib\site packages\selenium\webdriver\remote\webelement.py”,第628行,在\u execute中
返回self.\u parent.execute(命令,参数)
文件“C:\Python\Python37-32\lib\site packages\selenium\webdriver\remote\webdriver.py”,第320行,执行
self.error\u handler.check\u响应(响应)
文件“C:\Python\Python37-32\lib\site packages\selenium\webdriver\remote\errorhandler.py”,第242行,在check\u响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.StaleElementReferenceException:消息:Stale元素引用

希望能得到一些帮助,谢谢

sendkeys()
之前使用
click()
方法在文本区域内单击,然后尝试插入文本。

sendkeys()之前使用
click()
方法在文本区域内单击,然后尝试插入文本。

好的,我发现了问题,问题在于,当向textarea发送键时,元素会发生以下变化:

<textarea class="Ypffh" aria-label="Add a comment…" placeholder="Add a comment…" autocomplete="off" autocorrect="off"></textarea>
(我改变了查找元素的方式,因为在代码中按类名查找元素看起来更好)


如果有人有更好的解决方案,我会很高兴听到

好吧,我发现了问题,问题是当向文本区域发送键时,元素会发生以下变化:

<textarea class="Ypffh" aria-label="Add a comment…" placeholder="Add a comment…" autocomplete="off" autocorrect="off"></textarea>
(我改变了查找元素的方式,因为在代码中按类名查找元素看起来更好)


如果有人有更好的解决方案,我会很高兴听到

根据您的解决方案,对我有效的方法是使用不同的选择器调用文本区域:

            textarea = site.find_element_by_xpath('//textarea')
            textarea.click()
            textarea2 = site.find_element_by_tag_name('textarea')
            textarea2.send_keys('hi!')

(同一个选择器不起作用)

基于您的解决方案,对我有效的方法是使用不同的选择器调用文本区域:

            textarea = site.find_element_by_xpath('//textarea')
            textarea.click()
            textarea2 = site.find_element_by_tag_name('textarea')
            textarea2.send_keys('hi!')

(同一选择器不起作用)

为什么要使用“发送”。发送文本后输入。在textarea中,在代码在textarea中键入文本后,它将按enter键发布注释为什么使用send.enter发送文本。在textarea中,想法是在代码在textarea中键入文本后,它将按enter键发布评论。我尝试过,同样的情况也发生了。我认为他们可能做了一些事情,阻止机器人发布评论。。。也许元素改变了,或者其他什么……我试过了,同样的事情也发生了。我认为他们可能做了一些事情,阻止机器人发布评论。。。可能元素发生了变化或其他什么……是的,有更好的方法,请提供导航步骤。我尝试使用您的绝对xpath,但似乎我正在努力执行导航。去了之后,我点击了登录链接,然后我就迷路了。我写了instagram.com/example_account作为一个例子哈哈。我的意图是,无论如何,它都应该有效。例如,您可以尝试使用自己的帐户。现在,我的导航步骤如下:我在一个新选项卡中打开帐户的最后一张照片,然后检查评论框。你应该看到有一个表单元素,里面有一个textarea元素。然后我复制了xpath元素(或者在我的最新答案中,我按类名搜索了它)。我的代码中的第一个xpath用于最新文章,第二个xpath用于注释区域是的,有更好的方法可以做到这一点,请提供导航步骤。我尝试使用您的绝对xpath,但似乎我正在努力执行导航。去了之后,我点击了登录链接,然后我就迷路了。我写了instagram.com/example_account作为一个例子哈哈。我的意图是,无论如何,它都应该有效。例如,您可以尝试使用自己的帐户。现在,我的导航步骤如下:我在一个新选项卡中打开帐户的最后一张照片,然后检查评论框。你应该看到有一个表单元素,里面有一个textarea元素。然后我复制了xpath元素(或者在我的最新答案中,我按类名搜索了它)。代码中的第一个xpath用于最新文章,第二个xpath用于注释区域
            textarea = site.find_element_by_xpath('//textarea')
            textarea.click()
            textarea2 = site.find_element_by_tag_name('textarea')
            textarea2.send_keys('hi!')