Проблемы при входе в Instagram с Selenium Python - PullRequest
0 голосов
/ 20 января 2020

Я хочу войти в Instagram, используя селен python. Я пытался найти элементы по имени, тегу и селектору css, но селен не находит никакого элемента (я думаю). Я также пытался переключиться на iFrame, но ничего.

Это ошибка:

Traceback (последний вызов был последним): Файл "C: / Users / anton / Рабочий стол / Instabot / chrome instagram bot / main.py ", строка 8, в файле my_driver.sign_in (имя пользователя = USERNAME, пароль = ПАРОЛЬ) Файл" C: \ Users \ anton \ Desktop \ Instabot \ chrome instagram bot \ chrome_driver_cli.py ", строка 39, в sign_in username_input = self.driver.find_element_by_name (" username ") Файл" C: \ Users \ anton \ Desktop \ Instabot \ chrome instagram bot \ venv \ lib \ site -packages \ selenium \ webdriver \ remote \ webdriver.py ", строка 496, в find_element_by_name возвращает self.find_element (by = By.NAME, value = name) Файл" C: \ Users \ anton \ Desktop \ Instabot \ chrome instagram bot \ venv \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py ", строка 978, в find_element 'value': value}) ['value'] Файл" C: \ Users \ anton \ Desktop \ Instabot \ chrome instagram bot \ venv \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py ", строка 321, в файле execute self.error_hand ler.check_response (ответ) Файл "C: \ Users \ anton \ Desktop \ Instabot \ chrome instagram bot \ venv \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py", строка 242, в check_response повысить исключение_класса (сообщение, экран, stacktrace) selenium.common.exceptions.NoSuchElementException: Сообщение: такого элемента нет: невозможно найти элемент: {"method": "css selector", "selector": "[name =" username "]"} (Информация о сеансе: chrome = 79.0.3945.130)

Это код

from selenium import webdriver
from selenium.common.exceptions import SessionNotCreatedException
from selenium.webdriver.common.keys import Keys


supported_versions_path = [
            "..\\chrome driver\\CHROME 80\\chromedriver.exe",
            "..\\chrome driver\\CHROME 79\\chromedriver.exe",
            "..\\chrome driver\\CHROME 78\\chromedriver.exe"
        ]

instagram_link = "https://www.instagram.com/accounts/login/?source=auth_switcher"


class ChromeDriver:

    def __init__(self):
        self.driver = self.__startup()


    def __startup(self):

        self.driver = None
        for current_checking_version in supported_versions_path:
            if self.driver is None:
                try:
                    self.driver = webdriver.Chrome(current_checking_version)
                    pass
                except SessionNotCreatedException:
                    self.driver = None
        return self.driver

    def sign_in(self, username, password):

        self.driver.get(instagram_link)
        frame = self.driver.find_element_by_tag_name("iframe")
        self.driver.switch_to.frame(frame)

        username_input = self.driver.find_element_by_name("username")
        # password_input = self.driver.find_element_by_name('password')
        # username_input.send_keys(username)
        # password_input.send_keys(password)
        # password_input.send_keys(Keys.ENTER)

    def get_page(self, url):
        self.driver.get(url)

    def quit(self):
        self.driver.quit()

Можете ли вы помочь мне?

1 Ответ

0 голосов
/ 20 января 2020

Кажется, вы были близки. имя пользователя в Instagram - это ReactJS, поэтому вам нужно вызвать WebDriverWait и затем вызвать send_keys() с использованием одной из следующих стратегий локатора :

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='username']"))).send_keys("Antonio_Sabatino")
    
  • XPATH :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='username']"))).send_keys("Antonio_Sabatino")
    
  • Примечание : Вы должны добавить следующий импорт:

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