【发布时间】:2021-06-14 05:31:42
【问题描述】:
这基本上就是我想要做的。我有 2 个网站,网站 A 包含我需要转移到网站 B 的数据。本质上
由于网站 A 出现故障,我正在将数据从网站 A 迁移到 B 很快。
我需要移动的是不仅仅是文本,它可以是文本、图像或超链接文本,还有一些我需要保留的格式内容。我认为最简单的方法是复制和粘贴而不是存储所有这些数据,这样我就可以将其插入网站 B,就像复制和粘贴一样。在我制作代码解决方案之前,他们只是从字面上复制和粘贴从 A 到 B 的所有内容。现在我已经在我的代码中实现了所有内容(获取链接和其他所需的内容),但我无法移动数据。所以基本上这就是我在尝试复制和粘贴数据之前正在做的事情。我正在使用 python 3。
original_window = driver.current_window_handle
driver.execute_script("window.open()")
wait.until(EC.number_of_windows_to_be(2))
driver.switch_to.window(driver.window_handles[1])
actURL = a.getlink()
driver.get(actURL)
e = a.getactivitydata(driver)
driver.close()
driver.switch_to.window(driver.window_handles[0])
这里的 A 是一个自定义对象,它有方法 get link ,它返回指向我需要数据的网站 A 的链接。 A还包含方法getactivitydata,这是我要选择、复制和返回驱动程序的地方。方法代码是
def getactivitydata(self, driver):
r = driver.page_source
soup = BeautifulSoup(r, 'html.parser') # Raw html obj
ty = self.typef
if ty == 'page':
elem = driver.find_element_by_id("page-content")
end = driver.find_element_by_class_name('course-nav')
a = ActionChains(driver)
#elem.send_keys("bar")
a.move_to_element(elem)
a.click_and_hold().perform()
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
a.move_to_element(end)
a.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
#elem.send_keys(Keys.CONTROL, 'a') # Select all
#elem.send_keys(Keys.CONTROL, 'c') # Copy
return(elem)
elif ty == 'quiz':
pass
elif ty == 'assign':
pass
elif ty == 'folder':
pass
elif ty == 'glossary':
pass
elif ty == 'resource':
pass
elif ty == 'forum':
pass
ty 代表页面的类型,因为每个页面的处理方式都略有不同。我想要做的基本上是选择 HTML 中元素 id 为“page-content”的所有文本和图像。运行代码时(使用大量其他代码)我得到以下异常
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
在我尝试实际复制所需数据的行上引发了此异常。
虽然实际包含文本的元素是 它们都属于的最小的 HTML 标记是 欢迎任何帮助或指导,我不反对使用复制/粘贴以外的其他方法,但我确实需要它在网站 B 上输出,就像它已被复制/粘贴一样。还有一些页面类型具有多个单独的元素,(如在线测验,您有问题 1、a)...、b...) ... 问题 2) 等...)谢谢! 【问题讨论】:(它已关闭>,这是我第一次发帖,我不知道如何让堆栈溢出关闭时显示)图像包含在 保留图像在文本中显示的顺序 以及如何获得
wget 实用程序可以拉取网站的完整镜像,跟踪所有链接并重建目录树。这会比抓取更有效。
标签: python html python-3.x selenium copy-paste