Python 使用selenium的Instagram登录脚本,无法执行。发送密钥(';测试';)

Python 使用selenium的Instagram登录脚本,无法执行。发送密钥(';测试';),python,python-3.x,selenium,bots,chrome-web-driver,Python,Python 3.x,Selenium,Bots,Chrome Web Driver,好的,正如标题所说,我几乎无法让我的python程序正常工作,它是一个登录instagram的机器人,它实际上不会部分地进行登录,我已经尝试了使用动作链,如果没有它们,这就是我的代码(python 3.6.1): 很简单,对吧?由于没有语法错误,我真的很困惑到底出了什么问题,因为一旦我运行代码,进入登录页面后就什么也没发生。(也就是说,它实际上并没有启动用户名和密码表单) 这就是模块所说的: 回溯(最近一次调用上次):文件 “C:\Users\ferna\Desktop\trying brows

好的,正如标题所说,我几乎无法让我的python程序正常工作,它是一个登录instagram的机器人,它实际上不会部分地进行登录,我已经尝试了使用动作链,如果没有它们,这就是我的代码(python 3.6.1):

很简单,对吧?由于没有语法错误,我真的很困惑到底出了什么问题,因为一旦我运行代码,进入登录页面后就什么也没发生。(也就是说,它实际上并没有启动用户名和密码表单)

这就是模块所说的:

回溯(最近一次调用上次):文件 “C:\Users\ferna\Desktop\trying browser script.py”,中的第17行 .send_keys('test')\File“C:\Users\ferna\AppData\Local\Programs\Python\Python36-32\lib\site packages\selenium\webdriver\common\action\u chains.py”, 执行中的第83行 action()文件“C:\Users\ferna\AppData\Local\Programs\Python\Python36-32\lib\site packages\selenium\webdriver\common\action\u chains.py”, 第277行,输入 Command.MOVE_TO,{'element':TO_element.id})文件“C:\Users\ferna\AppData\Local\Programs\Python\Python36-32\lib\site packages\selenium\webdriver\remote\webdriver.py”, 执行中的第321行 self.error\u handler.check\u响应(response)文件“C:\Users\ferna\AppData\Local\Programs\Python\Python36-32\lib\site packages\selenium\webdriver\remote\errorhandler.py”, 第242行,在check_响应中 引发异常类(消息、屏幕、堆栈跟踪)selenium.common.exceptions.StaleElementReferenceException:消息: 陈旧元素引用:元素未附加到页面文档 (会话信息:chrome=71.0.3578.98)(驾驶员信息: chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),平台=Windows NT 10.0.17134 x86_64)

Selenium安装不正确吗?还是错误在我的代码中?如果能得到任何帮助,我将不胜感激。 顺便说一句:我是按名称而不是xpath查找用户名和密码元素的,因为Instagram每次打开页面时都会更改xpath和选择器,这使得这些元素在其他方面很难找到,至少我的经验非常有限

此图显示测试脚本后浏览器的外观: 使用WebDriver等待:

    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 
    "input[name='username']"))).send_keys("test")
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 
    "input[name='password']"))).send_keys("test")


希望这能奏效

它适用于我的代码,如果有帮助,请接受它


1在实际登录页面出现之前添加预期的\u条件等待


第二个\u页面\u标志=等待。直到(EC.presence\u元素\u位于(
(By.CLASS_NAME,“KPnG0”)#出现util登录页面

2在此处更改xpath选择器语法

login\u button\u=browser.find\u element\u by\u xpath(
“//表单[@class='HmktE']/div[3]/button”)
登录\按钮\点击()

此处的所有代码:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Chrome()
browser.get('https://www.instragram.com')

wait = WebDriverWait(browser, 10)

login_elem = browser.find_element_by_xpath(
   '//*[@id="react-root"]/section/main/article/div[2]/div[2]/p/a')

second_page_flag = wait.until(EC.presence_of_element_located(
    (By.CLASS_NAME, "KPnG0")))  # util login page appear


user = browser.find_element_by_name("username")

passw = browser.find_element_by_name('password')

ActionChains(browser)\
    .move_to_element(user).click()\
    .send_keys('test')\
    .move_to_element(passw).click()\
    .send_keys('test')\
    .perform()

login_button_ = browser.find_element_by_xpath(
    "//form[@class='HmktE']/div[3]/button")

login_button_.click()

试试这段代码。它对我有用。不需要动作类。希望这能帮助你。任何问题请回复。你需要从下载最新的chrome驱动程序ChromeDriver 2.45


我也有同样的问题。问题是python试图立即查找元素,但webdriver尚未加载该元素。要解决此问题,请使程序等待加载元素,然后才调用它们。您可以通过导入时间并添加:time.sleep(4)来完成此操作。这就是:

import time
from selenium import webdriver
browser = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
browser.get("https://www.instagram.com/accounts/login/")
time.sleep(4) #so you let the webpage load
browser.find_element_by_name("username").send_keys("blablabla")

非常感谢你!我只是简单地使用了sleep(2)命令。因为我已经导入了睡眠模块,但是忘记了使用它。谢谢!,问题是我没有给页面足够的时间来加载。我用一个简单的sleep(2)命令修复了它。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Chrome()
browser.get('https://www.instragram.com')

wait = WebDriverWait(browser, 10)

login_elem = browser.find_element_by_xpath(
   '//*[@id="react-root"]/section/main/article/div[2]/div[2]/p/a')

second_page_flag = wait.until(EC.presence_of_element_located(
    (By.CLASS_NAME, "KPnG0")))  # util login page appear


user = browser.find_element_by_name("username")

passw = browser.find_element_by_name('password')

ActionChains(browser)\
    .move_to_element(user).click()\
    .send_keys('test')\
    .move_to_element(passw).click()\
    .send_keys('test')\
    .perform()

login_button_ = browser.find_element_by_xpath(
    "//form[@class='HmktE']/div[3]/button")

login_button_.click()
from selenium import webdriver
import time
driver=webdriver.Chrome("Path of the chromdriver location" + "chromedriver.exe" )
driver.get("https://www.instagram.com/accounts/login/?source=auth_switcher")
user=driver.find_element_by_name("username")
user.send_keys("kajal")
passwd=driver.find_element_by_name("password")
passwd.send_keys("1234")
time.sleep(1)
button=driver.find_element_by_xpath(".//*[@id='react-root']/section/main/div/article/div/div[1]/div/form/div[3]/button")
button.click()
import time
from selenium import webdriver
browser = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
browser.get("https://www.instagram.com/accounts/login/")
time.sleep(4) #so you let the webpage load
browser.find_element_by_name("username").send_keys("blablabla")