在python中使用selenium将键发送到不起作用的文本区域
我试图通过制作一个进入instagram账户并在帖子上发表评论的机器人来学习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/
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!')