【问题标题】:Selenium webdriver error - stale element refernceSelenium webdriver 错误 - 过时的元素参考
【发布时间】:2019-01-19 18:27:48
【问题描述】:

所以我尝试使用网站https://instagram.com 练习我的硒技能

我可以使用 selenium 找到一个对象并单击,但无法向它发送密钥。

所以基本上,我尝试在 Instagram 上自动化 cmets,我找到了“添加评论”,成功点击它,但是当我尝试发送密钥时出现错误。

代码部分:

comment_picture = driver.find_elements_by_tag_name('textarea')
    for l in comment_picture:
        try:
            print l.get_attribute("class")
            l.click()
            time.sleep(1)
            l.send_keys('test')

错误部分:

消息:过时的元素引用:元素未附加到页面文档

预期的结果应该是我可以评论 Instagram 上的每张照片。 我不想回答。我真的很想学习硒。如果有人知道我做错了,如果我能得到提示而不是完整的答案,那就太好了。

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    stale element是因为点击的时候元素已经被修改了,你得像这样重新找元素

    comment_picture = driver.find_elements_by_tag_name('textarea')
    index = 1 # xpath index start from 1
    for txt in comment_picture:
        try:
            txt.click()
            time.sleep(1)
            # re-search the textarea
            txt = driver.find_element_by_xpath('(//textarea)[%s]' % index) 
            txt.send_keys('test')
            index = index + 1 
    

    【讨论】:

    • 感谢 learnin,但我不完全理解您的代码。请解释 。经过一些更改,我得到了一个错误,说“不能专注于元素”。你知道这个错误吗?谢谢!!!!!!
    • 另外,我相信每个人都想知道你是如何得到这个答案的。
    • @learnin ,我知道这是工作。您能解释一下代码以及如何获得解决方案吗?谢谢。之后我们就可以结案了
    • 已经解释过了,代码哪里看不懂?
    • 你是怎么得到的?我对解决方案不感兴趣,我有兴趣学习 selenium 并学习如何自行排除故障。
    【解决方案2】:

    .find_element_* 函数返回的元素引用来自初始页面加载。当您click() 时,您正在离开初始页面,使所有元素引用都过时了。在将键发送到新元素之前,您需要再次调用 find_elements。

    【讨论】:

    • 谢谢科里,但我不完全明白。这在网站上的所有元素的 for 循环中执行,我可以访问输入区域,但我无法发送密钥。
    • 有人帮忙吗?请。我被困住了。
    • 科里?什么?
    【解决方案3】:

    您必须确保您已登录并能够发表评论。 还有executable_path='your/path'

    from selenium import webdriver
    
    from selenium.webdriver.common.keys import Keys
    from time import sleep
    driver = webdriver.Chrome(executable_path="/home/chromedriver")
    driver.get('https://www.instagram.com/p/Bs0y4Myg3Hk/')
    comment=driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div/article/div[2]/section[3]/div/form/textarea')
    comment.send_keys('hello')
    comment.send_keys(Keys.RETURN)
    sleep(10)
    driver.close()
    

    【讨论】:

    • 评论不用于扩展讨论;这个对话是moved to chat
    • 只对指定图片有效。在搜索每个“添加评论”元素时,在 FOR 循环的主页上不起作用的主要问题。
    猜你喜欢
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多