Instagram 上的硒 python

Selenium python on instagram

我正在尝试使用 selenium 在 Instagram 上进行一些网络抓取。具体来说,我正在尝试通过此地址登录 https://www.instagram.com/accounts/login/ 含硒。

在这个页面,输入'username'是这样写的

<input class="_ph6vk _o716c" aria-describedby="" aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="30" name="username" placeholder="Phone number, username, or email" value="" type="text">

我在 python 中所做的是:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains


driver=webdriver.Firefox() 
driver.get('https://www.instagram.com/accounts/login/')

input_username = driver.find_elements_by_xpath("//input[@name='username']")
input_username.send_keys("username")

Python returns 我: AttributeError: 'list' 对象没有属性 'send_keys'

所以我做了同样的改变:

input_username[0].send_keys("username")

错误是:

IndexError: 列表索引超出范围

所以,数组是空的。有人知道怎么解决吗?

试试这个代码:

from selenium import webdriver

import time

driver=webdriver.Firefox()
driver.get('https://www.instagram.com/accounts/login/')
time.sleep(2)
user_name=driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[1]/div/input')
user_name.send_keys('user_name')
password=driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[2]/div/input')
password.send_keys('pa$$')
driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/span[1]/button').click()

在您的情况下,页面可能未加载表单,因此请使用 WebDriverWait 让元素加载并启动 scraping。

您可以用这种方式检查元素,而不是放置 time.sleep(2),因为它可能需要很长时间才能加载。

myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))

如果可能的话,也尝试使用api,scraping应该是第二种方法。

表单在页面加载后加载,我是这样做的:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Firefox()
driver.get("https://instagram.com")
time.sleep(4)
driver.find_element_by_name("username").send_keys("foobar")
driver.find_element_by_name("password").send_keys("pass")
driver.find_element_by_name("password").send_keys(Keys.ENTER)

最后有点hacky