当试图制作一个对Instagram图片发表评论的Selenium机器人时,该机器人将单击评论框,但键将不会发送。但是,有趣的是,当我自己手动单击注释框时,键将发送。我不确定这是怎么回事,因为似乎可以很好地单击该框,但是如果没有我手动单击它,键将不会发送。我是Python和Selenium的新手...以及一般的编程。
我尝试在click()和发送键之间添加延迟,但无济于事。我仍然有同样的问题。我还尝试过多次发送密钥,但它们之间会有一定的延迟。但是同样,这是行不通的。我确定我的类名正确,因为机器人似乎找到了该框,问题出在发送键上。我搜索了很多东西,我知道其他人也遇到了同样的问题,但是没有解决方案对我有用,因此我想到了两次发送密钥以及增加时间延迟的想法。这是下面有问题的代码-
comment = driver.find_element_by_class_name("Ypffh").click()
time.sleep(5)
comment.send_keys("test")
time.sleep(5)
comment.send_keys("test")
这是检查Instagram评论框时看到的内容-
<textarea aria-label="Add a comment…" placeholder="Add a comment…" class="Ypffh" autocomplete="off" autocorrect="off" style="height: 18px;"></textarea>
编辑-----
我已将代码更新为此,但是仍然没有运气。
comment = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "Ypffh")))
comment.click()
comment.send_keys("test")
答案 0 :(得分:0)
您正尝试send_keys
到返回NONE的click
。
只需将其更改为:
comment = driver.find_element_by_class_name("Ypffh")
comment.click()
time.sleep(5)
comment.send_keys("test")
time.sleep(5)
comment.send_keys("test")
最佳做法是使用WebDriverWait
而不是time.sleep
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
comment = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "Ypffh")))
comment.click()
comment.send_keys("test")
comment.send_keys("test")
答案 1 :(得分:0)
您可以使用WebDriverWait尝试确保在将密钥发送给文本区域之前浏览器可以单击该文本区域。另外,它并不是完全必要的,但是我想保存那些我知道将在顶部使用By的元素。
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
TextArea = (By.CLASS_NAME, "Ypffh")
#Initialize browser and go to proper page same as before...
WebDriverWait(driver, 10).until(EC.element_to_be_clickable(TextArea)).send_keys("Whatever you want to Type")
另一个可能的问题可能是time.sleep()调用。它没有考虑到您的操作系统进程调度程序,它可能导致睡眠比您实际传递给它的更多或更少。更好的选择是硒的implicit_wait()。
答案 2 :(得分:0)
我遇到了同样的问题。然后我尝试先点击评论框元素,然后发送密钥。 刚好适合我
driver.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div[3]/section[3]/div/form/textarea').click()
time.sleep(1.5)
driver.find_element_by_xpath("/html/body/div[5]/div[2]/div/article/div[3]/section[3]/div/form/textarea").send_keys("nice post,Keys.ENTER)#comment