为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Chromedriver 和 Selenium Python 在 Instagram

如何使用 Chromedriver 和 Selenium Python 在 Instagram

Cats萌萌 2022-12-06 16:46:59
这是经过检查的源代码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 版本匹配,并按照说明查找元素。为什么会出现此错误?
查看完整描述

4 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

Instagram应用程序是通过React元素构建的。因此,在您开始搜索登录元素时调用 url 之后,您将面临NoSuchElementException


解决方案

要使用一组有效的凭据在Instagram中登录,您需要引入WebDriverWait并且element_to_be_clickable()您可以使用以下 定位器策略

使用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

浏览器快照:

//img1.sycdn.imooc.com//638f01ab0001450713330530.jpg

查看完整回答
反对 回复 2022-12-06
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

观察打开 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


查看完整回答
反对 回复 2022-12-06
?
茅侃侃

TA贡献1842条经验 获得超21个赞

试试下面的代码:


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


查看完整回答
反对 回复 2022-12-06
?
四季花海

TA贡献1811条经验 获得超5个赞

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')


查看完整回答
反对 回复 2022-12-06
  • 4 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信