Как прокрутить страницу Twitter, чтобы загрузить следующие страницы и извлечь данные - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь прокрутить вниз комментарии в статусе твиттера, пытаюсь извлечь страницу со всеми комментариями (или хотя бы первые 5 страниц). Использование селена драйвера для него, но не удалось с прокруткой, поэтому я должен сделать вручную и извлечь. Я использую Python 3.6.5, пожалуйста, помогите ...

например, для этого твита - https://twitter.com/TeamYouTube/status/1012415985184206848 Может ли кто-нибудь помочь мне с кодом ..

Мой код:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome(executable_path="...../chromedriver")
driver.get('https://twitter.com/TeamYouTube/status/1012415985184206848')

for i in range(1,10):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)

ip = input("Enter y to proceed: ")
if(ip == 'y'):
    page = driver.page_source
    filename = input('Enter file name : ')
    path = 'D:/page_'+filename+'.html'
    f = open(path,'w',encoding='utf-8')
    f.write(page)
f.close()
driver.close()

1 Ответ

0 голосов
/ 06 июля 2018

Попробуйте это:

driver.execute_script("arguments[0].scrollTo(0, document.body.scrollHeight);", driver.findElement(By.id("#permalink-overlay-dialog")));

Объяснение: Вы должны прокрутить конкретный div. Чтобы иметь возможность сделать это, вы должны найти этот элемент на странице и прокрутить до конца страницы только этот элемент.

Второе предложение использовать:

from selenium.webdriver.common.keys import Keys
# locate element and simulate 'END' button press
driver.find_element_by_id("permalink-overlay-dialog").send_keys(Keys.END)

если не сработает, попробуйте также расширить с помощью ActionChains:

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id("permalink-overlay-dialog")
action = ActionChains(driver)
action.move_to_element(element).perform()
element.send_keys(Keys.END)
...