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


def wait(dr, x): 
    element = WebDriverWait(dr, 50).until(
    EC.presence_of_all_elements_located((By.XPATH, x)) 
) 
return element 
from selenium import webdriver 
browser = webdriver.Firefox() 
browser.get("http://www.dinamalar.com/user_comments.asp? uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8D") 
for elem in wait(browser, '//*[@id="commsec"]/div[2]/div[1]'): 
print elem.text 

Это ссылка мне нужно, чтобы извлечь все комментарии http://www.dinamalar.com/user_comments.asp?uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8DИзвлечение комментарии пользователей из новостей сайта

Но мой код извлекая только первые 10 комментариев. После нажатия кнопки остальные 10 комментариев загружаются динамически. Как извлечь все эти комментарии с помощью python selenium

ответ

2

Идея состоит в том, чтобы найти, сколько элементов «больше идей» присутствует на странице. Каждый раз, когда вы нажимаете кнопку и загружаете больше комментариев, появляется еще одна красная кнопка «больше идей». Выполнение:

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


browser = webdriver.Firefox() 
wait = WebDriverWait(browser, 10) 
browser.get("http://www.dinamalar.com/user_comments.asp?uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8D") 

# initial wait for the page to load 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".morered"))) 

pages = 1 
while True: 
    browser.find_elements_by_css_selector(".morered")[-1].click() 

    # wait for more "load more" buttons to be present 
    try: 
     wait.until(lambda browser: len(browser.find_elements_by_css_selector(".morered")) > pages) 
    except TimeoutException: 
     break # no more data loaded, exit the loop 

    print("Comments loaded: %d" % len(browser.find_elements_by_css_selector(".dateg"))) 

    pages += 1 

browser.close() 

Обратите внимание, что я также удалил лишнее пространство внутри URL-адреса.

+0

Спасибо, что работает отлично. Я начинаю к этому, так как получить комментарии –

+0

@VinayakumarR Я бы использовал XPath здесь: 'comments = [element.text для элемента в браузере.find_elements_by_xpath (" // div [@ class = 'boxcmt1'] // a [@ 'заголовок' CLASS =]/следующий-родственный :: Div ")]'. Пожалуйста, проверьте. Благодарю. – alecxe

+0

После добавления этой строки в существующий код, отображающий предупреждение о предупреждении ввода-вывода, не найденное ASCII, но я пытаюсь его запустить, он показывает ошибку –

Смежные вопросы