我是一个新的网页抓取和需要从我的研究网站:https://www.promedmail.org/一些数据。你知道吗
我编码的是
但是,在#5上,即使我使用文章ID成功地获得了<a>
标记,我也无法单击链接。错误消息显示:
selenium.common.exceptions.ElementNotInteractableException: Message: Element <a id="id6519943" class="lcl" href="javascript:;"> could not be scrolled into view
经过一些研究,我想我需要滚动到链接,因为链接是不可见的。我尝试了stackoverflow中建议的5种不同的解决方案,但没有一种真正适合我,我陷入了困境。它们在下面的代码中列出并注释掉。你知道吗
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()
单击链接时,右侧面板上将弹出一个预览。我打算把这篇文章删掉,转到下一个链接。你知道吗
快速解决方案: 您可以使用javascript单击链接,如下所示。你知道吗
根本原因: 嗯,我们在html中找到了2个与id匹配的元素。第一个是在搜索结果时隐藏的最新通知。第二个是显示在搜索结果下的屏幕。这就是为什么您不能滚动到元素,因为当有多个具有匹配id的实例时,按id查找元素将获得第一个实例
您可以使用下面的代码行来确认这一点。你知道吗
解决方案: 如果您想滚动到搜索结果中的元素,然后单击它,那么您可以使用下面的
相关问题 更多 >
编程相关推荐