Python / Selenium - Невозможно передать ключи в поисковой выдаче Instagram - PullRequest
0 голосов
/ 06 мая 2018

Итак, у меня есть файл python, который входит в Instagram.com, помещает учетные данные учетной записи и, наконец, вводит ключи в поле поиска после входа в систему. После того, как он вставил ключи в окно поиска, я не вижу возможности отправить ключи, чтобы Instagram мог перенести меня на страницу аккаунта. (например: я поместил @streetgoodies в строку поиска instagram, я нажимаю ввод, и это приводит меня к www.instagram.com/streetgoodies/)

Можно ли как-нибудь отправить ключи в поиск, чтобы он мог перенаправить меня к поисковому запросу, который я запросил?

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# start a new browser session 
browser = webdriver.Chrome('PATH/TO/DRIVER')

# navigate to a webpage
browser.get('https://www.instagram.com')

# find login link 
login_elem = browser.find_element_by_xpath(
    '//*[@id="react-root"]/section/main/article/div[2]/div[2]/p/a')

# click login in button
login_elem.click()

# send login info credentials to correct input boxes
browser.find_element_by_xpath("//input[@name='username']").send_keys('USERNAME')
browser.find_element_by_xpath("//input[@name='password']").send_keys('PASSWORD')

# click final login button
browser.find_element_by_xpath("//button[contains(.,'Log in')]").click()

# find hidden search bar
searchbox = WebDriverWait(browser, 10).until(
    EC.visibility_of_element_located(
        (By.XPATH, "//input[@placeholder='Search']")
    )
)

# send search into input

searchbox.send_keys('streetgoodies')
searchbox.submit()

searchbox.submit () вызывает проблему (я полагаю) Спасибо !!

1 Ответ

0 голосов
/ 06 мая 2018

Я написал сценарий для вас. Позвольте мне сначала объяснить:

  1. Я получил страницу прямого входа. Таким образом, вам не нужно искать логин.
  2. Должна быть функция WebDriverWait, потому что страница входа не появляется быстро.
  3. Основная проблема вашего кода и Instagram в том, что здесь нет кнопки отправки. Так что должно быть send_keys (Keys.ENTER)
  4. One Keys.ENTER выбирает первый элемент :), поэтому я добавил еще один Keys.Enter

Этот код работает:

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

# start a new browser session 
browser = webdriver.Chrome('/pathtochromedriver')

# navigate to a webpage
browser.get('https://www.instagram.com/accounts/login/')
login_wait = WebDriverWait(browser, 10)

# click login in button
elem = login_wait.until(EC.visibility_of_element_located((By.XPATH, ".//input[@name='username']")))
elem.send_keys("usrname")
elem = login_wait.until(EC.visibility_of_element_located((By.XPATH, ".//input[@name='password']")))
elem.send_keys("passwd")

# click final login button
browser.find_element_by_xpath("//button[contains(.,'Log in')]").click()

# find hidden search bar
searchbox = WebDriverWait(browser, 10).until(
    EC.visibility_of_element_located(
        (By.XPATH, "//input[@placeholder='Search']")
    )
)

# send search into input

searchbox.send_keys('streetgoodies')
time.sleep(2)
# searchbox.submit()

searchbox.send_keys(Keys.ENTER)
time.sleep(1)
searchbox.send_keys(Keys.ENTER)
...