Как сканировать некоторые комментарии на конкретном c веб-сайте? (Я встретил вызов.) - PullRequest
0 голосов
/ 02 марта 2020

Я новичок в сканировании и столкнулся с трудной проблемой во время учебы.

В любом случае, я пытался сканировать комментарии в новостях в Интернете, но мне это не удалось.

Это мой код в python с селеном.


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


driver = webdriver.Chrome('./chromedriver')

url = 'https://www.etnews.com/20200228000119?mc=em_101_00001'

driver.get(url)

try:
    element = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#list > div:nth-child(3) > div.reply-bottom > div.reply-content-wrapper > div.reply-content > p')))

    comment_list = driver.find_element_by_css_selector('#list > div:nth-child(3) > div.reply-bottom > div.reply-content-wrapper > div.reply-content > p')
except:
    print('Timeout')

print(comment_list.text) 

driver.quit()

Я думаю, что chromedriver, похоже, не обнаружил css_selector, потому что выходное сообщение всегда ' Тайм-аут '.

Я не знаю, почему комментарии на веб-сайте, являющемся одним из обычных веб-сайтов (https://www.etnews.com/), не могут быть изменены селеном.

Я хочу знать причину. Пожалуйста, помогите мне.

(пс. Я знаю HTML, CSS немного, НО не знаю Javascript хорошо)

1 Ответ

0 голосов
/ 02 марта 2020

На странице, которую вы просматриваете, есть фрейм. Комментарии внутри.

Чтобы собирать комментарии, вам сначала нужно переключиться на iframe, а затем вы сможете получить доступ к элементам внутри iframe, в вашем случае - к комментарию. Я изменил ваш скрипт для этого, попробуйте это:

driver = webdriver.Chrome('./chromedriver')
url = 'https://www.etnews.com/20200228000119?mc=em_101_00001'

driver.get(url)
driver.implicitly_wait(5)

# Switch to iframe
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[@title='livere']"))
# Search for comment
comment = driver.find_element_by_css_selector('#list > div:nth-child(3) > div.reply-bottom > div.reply-content-wrapper > div.reply-content > p')
print(comment.text)

driver.quit()

Надеюсь, это поможет, удачи!

...