Selenium- Python - поиск элементов после прокрутки и нажатия на полную страницу - PullRequest
0 голосов
/ 25 апреля 2020

У меня проблема в том, что я не получил все твиты после прокрутки и нажатия следующей кнопки. Я получаю только несколько последних твитов. Единственная идея, которая у меня есть, состоит в том, чтобы интегрировать очистку в то время как l oop. Но я хочу найти способ, где я получаю все твиты после прокрутки и нажатия вниз. Может быть, у кого-то есть идея или она может сказать ее, если это невозможно.

Более того, я относительно новичок в python и особенно в селене. Так что, если есть какие-либо другие советы к моему коду, пожалуйста, не стесняйтесь


from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
import random
import time


chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--incognito")

driver = webdriver.Chrome(r"path",chrome_options=chrome_options)

url = 'https://twitter.com/RegSprecher/status/1251100551183507456'
driver.get(url)
wait = WebDriverWait(driver, 20)

#Click on the Cookie banner, since it covers the further
wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'Schließen')]"))).click()


while True:


    #Click on the next button if possible
    try:
        element = driver.find_element(By.XPATH, "//span[contains(text(),'Weitere Antworten anzeigen')]")
        if element.is_displayed():
            actions = ActionChains(driver)
            actions.move_to_element(element).perform()
            wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'Weitere Antworten anzeigen')]"))).click()
    #if not scrolle down
    except NoSuchElementException :

        last_height = driver.execute_script("return document.body.scrollHeight")
        # Scroll down to bottom
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        # Wait to load page
        time.sleep(random.randint(1,3))
        # Calculate new scroll height and compare with last scroll height
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            # If heights are the same it will exit the function
            break
        last_height = new_height

#get tweets
tweet = driver.find_elements_by_css_selector("div[data-testid='tweet']")

print(tweet)


[<selenium.webdriver.remote.webelement.WebElement (session="07b337bdb89396d57c4b05c7454ec764", element="8e694557-5d4a-4af1-8b33-9c91679b31eb")>,
 <selenium.webdriver.remote.webelement.WebElement (session="07b337bdb89396d57c4b05c7454ec764", element="f52a06da-09c5-47f0-bf93-1fb5409472f3")>,
 <selenium.webdriver.remote.webelement.WebElement (session="07b337bdb89396d57c4b05c7454ec764", element="f773fd2b-537c-425c-9662-29439f0de9a6")>,
 <selenium.webdriver.remote.webelement.WebElement (session="07b337bdb89396d57c4b05c7454ec764", element="3b278f06-46bc-4231-ad87-059f94ebbce9")>,
 <selenium.webdriver.remote.webelement.WebElement (session="07b337bdb89396d57c4b05c7454ec764", element="1c1e408b-e5c8-45f7-bf31-64d778a70e0a")>]


...