Я новичок в изучении веб-страниц и мне нужно удалить некоторые данные с веб-сайта для моего исследования: https://www.promedmail.org/.
То, что я кодировал, было
- Получить на сайте
- Нажмите на вкладку поиска
- Введите ключевое слово (эбола)
- Нажмите, чтобы заполнить Результаты поиска
- Нажмите на первую ссылку, чтобы заполнить предварительный просмотр на правой панели
Просмотр изображения сайта
Однако на # 5 я не могу щелкнуть ссылку, хотя я успешно получил тег <a>
, используя идентификатор статьи. Сообщение об ошибке гласит:
selenium.common.exceptions.ElementNotInteractableException: Сообщение: Элемент не может быть прокручен в представлении
После некоторых исследований я решил, что мне нужно прокрутить ссылку, потому что ссылка не была видна. Я попробовал 5 различных решений, предложенных в stackoverflow, но ни одно из них действительно не помогло мне, и я застрял. Они перечислены в приведенном ниже коде и закомментированы.
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
class WebScraper:
"""Custome web scraper"""
def __init__(self, url, keyword):
self.url = url
self.keyword = keyword
self.search_results = []
self.ariticle_ids = []
def get_all_data(self):
"""Get beautiful soup objects for all articles"""
driver = webdriver.Firefox()
driver.get(self.url)
driver.find_element_by_id('search_tab').click()
driver.find_element_by_id('searchterm').send_keys(self.keyword)
driver.find_element_by_css_selector('#searchby_other > input[type=submit]').click()
element_article_id = driver.find_element_by_css_selector('#search_results > ul')
source_article_id = element_article_id.get_attribute('outerHTML')
soup_article_id = BeautifulSoup(source_article_id, 'html.parser')
tag_a = soup_article_id.select('ul > li > a[id]')
for i in range(len(tag_a)):
self.ariticle_ids.append(tag_a[i].get('id'))
element_link = driver.find_element_by_id(self.ariticle_ids[0])
# driver.execute_script("arguments[0].scrollIntoView();", element_link)
# driver.execute_script("window.scrollBy(0, -150);")
# element_link.location_once_scrolled_into_view
# ActionChains(driver).move_to_element(driver.find_element_by_id(self.ariticle_ids[0])).perform()
# WebDriverWait(driver, 1000000).until(EC.element_to_be_clickable((By.ID, self.ariticle_ids[0]))).click()
element_link.click()
if __name__ == "__main__":
url = 'https://www.promedmail.org/'
keyword = 'ebola'
webscrapper = WebScraper(url, keyword)
webscrapper.get_all_data()
Когда ссылка нажата, на правой панели появится всплывающее окно предварительного просмотра. Я планирую отказаться от статьи и перейти к следующей ссылке.