Instagram 登录 Python

Instagram Login in Python

在过去的几个月里,我一直在使用 BeautifulSoup 抓取 Instagram(各种用户的关注者数量),没有任何问题,但最近该脚本停止工作 - 假设是因为我需要登录才能查看配置文件。我发现这段代码使用 selenium 登录 Instagram,但我一直收到超时异常(包括在下面)。

我对 selenium 很陌生,但脚本似乎无法在 window

中找到用户名和密码输入
import itertools

from explicit import waiter, XPATH
from selenium import webdriver

driver = webdriver.Chrome()

username = "username"  # <username here>
password = "password"  # <password here>

# Load page
driver.get("https://www.instagram.com/accounts/login/")

# Login
waiter.find_write(driver, "//div/input[@name='username']", username, by=XPATH)
waiter.find_write(driver, "//div/input[@name='password']", password, by=XPATH)
waiter.find_element(driver, "//div/button[@type='submit']", by=XPATH).click()

TimeoutException                          Traceback (most recent call last)
<ipython-input-37-87d2d45e9b7f> in <module>
     11 
     12 # Login
---> 13 waiter.find_write(driver, "//div/input[@name='username']", username, by=XPATH)
     14 waiter.find_write(driver, "//div/input[@name='password']", password, by=XPATH)
     15 waiter.find_element(driver, "//div/button[@type='submit']", by=XPATH).click()

~\AppData\Local\Continuum\anaconda3\lib\site-packages\explicit\waiter.py in find_write(driver, elem_path, write_str, clear_first, send_enter, by, timeout, poll_frequency)
    133     """
    134     elem = find_element(driver, elem_path=elem_path, by=by, timeout=timeout,
--> 135                         poll_frequency=poll_frequency)
    136 
    137     if clear_first:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\explicit\waiter.py in find_element(driver, elem_path, by, timeout, poll_frequency)
     39     """
     40     wait = WebDriverWait(driver, timeout, poll_frequency)
---> 41     return wait.until(EC.presence_of_element_located((by, elem_path)))
     42 
     43 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\support\wait.py in until(self, method, message)
     78             if time.time() > end_time:
     79                 break
---> 80         raise TimeoutException(message, screen, stacktrace)
     81 
     82     def until_not(self, method, message=''):

TimeoutException: Message: 

我也尝试过使用驱动程序(而不是服务员)使用代码的变体,并且显示了以下异常

driver.find_element_by_name('username').send_keys('username')
driver.find_element_by_name('password').send_keys('password') 

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="username"]"}
  (Session info: chrome=83.0.4103.61)

您可以使用 HTML class 名称查找元素:

email_box = driver.find_element_by_class_name('f0n8F')
email_box.send_keys('Your email address')

在没有 div 元素的情况下尝试,应该可以。

waiter.find_write(driver, "//input[@name='username']", username, by=XPATH)
waiter.find_write(driver, "//input[@name='password']", password, by=XPATH)

username = driver.find_element_by_xpath("//input[@name='username']")
password = driver.find_element_by_xpath("//input[@name='password']")