如何使用Chromedriver和Selenium Python在Instagram登录页面中找到用户名和密码字段

问题描述 投票:0回答:4

这里检查过的源代码

input aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="75" name="username" type="text" class="_2hvTZ pexuQ zyHYP" value=""

我已尝试运行此代码

driver = webdriver.Chrome()
driver.get('https://www.instagram.com/')
driver.find_element_by_xpath("//input[@name=\"username\"]").send_keys(username)
driver.find_element_by_xpath("//input[@name=\"password\"]").send_keys(pw)
driver.find_element_by_xpath('//button[@type="submit"]').click()

但是有这样的错误

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name="username"]"}
  (Session info: chrome=83.0.4103.61)

我的chromedriver和chrome版本是匹配的,并按照以下说明查找元素。为什么会出现此错误?

python selenium selenium-chromedriver instagram webdriverwait
4个回答
0
投票

观察到,在打开instagram主页时,它会在登录表单上显示微调框一会儿,然后显示字段。因此,您需要在脚本中管理同步。

在代码中使用显式等待,直到所需的字段准备好进行交互。

username = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@name='username']")))
username.send_keys('username')
password = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@name='password']")))
password.send_keys('pw')

需要导入以下软件包

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

0
投票

尝试以下代码:

driver = webdriver.Chrome()
driver.get('https://www.instagram.com/')
txt_user = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'username')))
txt_user.send_keys('yourUserName')
txt_pwd = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'password')))
txt_pwd.send_keys('yourPassword')
btn_submit = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[type="submit"]')))
btn_submit.click()

正在导入:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

0
投票
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()  
driver.get('https://www.instagram.com/')
element = WebDriverWait(driver, 2).until(
    EC.presence_of_element_located((By.ID, "//input[@name=\"username\"]"))
)
element.sendkeys('user')

0
投票

Instagram应用程序是通过React元素构建的。因此,在启动搜索登录元素时调用URL后,您将面对NoSuchElementException


解决方案

要使用一组有效的凭据在Instagram]中登录,您需要为WebDriverWait引入element_to_be_clickable(),并且可以使用以下Locator Strategy

  • 使用XPATH

    driver.get("https://www.instagram.com/")
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='username']"))).send_keys("username")
    driver.find_element_by_xpath("//input[@name='password']").send_keys("password")
    driver.find_element_by_xpath("//button/div[text()='Log In']").click()
    
  • :您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

浏览器快照:

instagram_login


参考

您可以在Filling in login forms in Instagram using selenium and webdriver (chrome) python OSX中找到相关的讨论

© www.soinside.com 2019 - 2024. All rights reserved.