Как прокрутить всплывающее окно в Instagram с помощью Selenium - PullRequest
0 голосов
/ 14 января 2019

У меня есть скрипт на python, использующий селен, чтобы перейти к заданному профилю Instagram и перебрать подписчиков пользователя. На веб-сайте instagram, когда вы нажимаете, чтобы увидеть список подписчиков, открывается всплывающее окно с перечисленными учетными записями (вот снимок экрана сайта )

Однако, как визуально, так и в html, отображаются только 12 учетных записей. Чтобы увидеть больше, нужно прокрутить вниз, поэтому я попытался сделать это с помощью ввода Keys.PAGE_DOWN.

from selenium import webdriver
from selenium.common.exceptions         import TimeoutException
from selenium.webdriver.support.ui      import WebDriverWait 
from selenium.webdriver.support         import expected_conditions as EC
from selenium.webdriver.chrome.options  import Options
from selenium.webdriver.common.keys     import Keys
import time 

...

username = 'Username'
password = 'Password'
message  = 'blahblah'
tryTime  = 2

#create driver and log in
driver = webdriver.Chrome()
logIn(driver, username, password, tryTime)

#gets rid of preference pop-up
a = driver.find_elements_by_class_name("HoLwm")
a[0].click()

#go to profile
driver.get("https://www.instagram.com/{}/".format(username))

#go to followers list
followers = driver.find_element_by_xpath("//a[@href='/{}/followers/']".format(username))
followers.click()
time.sleep(tryTime) 

#find all li elements in list
fBody  = driver.find_element_by_xpath("//div[@role='dialog']")
fBody.send_keys(Keys.PAGE_DOWN) 

fList  = fBody.find_elements_by_tag("li")
print("fList len is {}".format(len(fList)))

time.sleep(tryTime)

print("ended")
driver.quit()

Когда я пытаюсь запустить это, я получаю следующую ошибку:

Message: unknown error: cannot focus element

Я знаю, что это, вероятно, потому что я использую неправильный элемент для fBody, но я не знаю, какой из них будет правильным. Кто-нибудь знает, на какой элемент я должен отправить ключ PAGE_DOWN, или есть ли другой способ загрузки учетных записей?

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 14 января 2019

элемент, который вы ищете - //div[@class='isgrP'], а Keys.PAGE_DOWN не работает для прокручиваемого div.

Ваша переменная fList содержит старое значение, вам нужно снова найти элементы после прокрутки.

#find all li elements in list
fBody  = driver.find_element_by_xpath("//div[@class='isgrP']")
scroll = 0
while scroll < 5: # scroll 5 times
    driver.execute_script('arguments[0].scrollTop = arguments[0].scrollTop + arguments[0].offsetHeight;', fBody)
    time.sleep(tryTime)
    scroll += 1

fList  = driver.find_elements_by_xpath("//div[@class='isgrP']//li")
print("fList len is {}".format(len(fList)))

print("ended")
#driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...