如何使用SeleniumWebDriver(python)选择、复制和粘贴元素中的所有内容

如何使用SeleniumWebDriver(python)选择、复制和粘贴元素中的所有内容,python,html,python-3.x,selenium,copy-paste,Python,Html,Python 3.x,Selenium,Copy Paste,这就是我想做的。我有2个网站,网站A包含我需要转移到网站B的数据。本质上 我正在将数据从网站A迁移到网站B,因为网站A正在关闭 很快 我需要移动的不仅仅是文本,它可以是文本、图像或超链接文本,还有一些格式的东西我需要保留。我认为最简单的方法是复制和过去,而不是将所有这些数据以一种允许我将其插入网站B的方式存储,就像复制和粘贴一样。在我制定代码解决方案之前,他们只是简单地复制和粘贴从a到B的所有内容。现在我已经在代码中实现了所有内容(获取链接和其他所需内容),但我无法移动数据。所以基本上,在我尝试

这就是我想做的。我有2个网站,网站A包含我需要转移到网站B的数据。本质上

我正在将数据从网站A迁移到网站B,因为网站A正在关闭 很快

我需要移动的不仅仅是文本,它可以是文本、图像或超链接文本,还有一些格式的东西我需要保留。我认为最简单的方法是复制和过去,而不是将所有这些数据以一种允许我将其插入网站B的方式存储,就像复制和粘贴一样。在我制定代码解决方案之前,他们只是简单地复制和粘贴从a到B的所有内容。现在我已经在代码中实现了所有内容(获取链接和其他所需内容),但我无法移动数据。所以基本上,在我尝试复制和粘贴数据之前,我正在做的就是这样。我正在使用Python3

            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
在我试图实际复制所需数据的行中出现此异常


实际包含文本的元素是,因此只需更新任何试图执行相同操作的人即可。单击拖动不起作用,所起的作用是

    a = ActionChains(driver)
    #elem.send_keys("bar")
    elem = driver.find_element(By.ID, "maincontent")
    #wait = WebDriverWait(driver, 10)
    #first = wait.until(EC.element_to_be_clickable(elem))
    a.move_to_element_with_offset(elem, 0, 0)
    a.key_down(Keys.SHIFT)
    a.double_click(elem).double_click(elem)
    end = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[3]')
    a.move_to_element(end).double_click(end)
    a.key_up(Keys.SHIFT)
    a.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

基本上,我在这里做的是在元素开始时按住shift键和四键单击(我认为3在技术上可以做到),在另一个总是在它下面的元素上,我尝试实现和偏移,但无法让它工作

使用
wget
实用程序可以拉出网站的完整镜像,跟踪所有链接并重建目录树。“那会比刮削更有效。”TimRoberts,“wget的实现是如何工作的?”?从谷歌上看,它看起来像是检索内容,所以我会检索特定元素的内容还是整个页面的内容?如果是整个页面,人们如何解析这些数据?好吧,我为没有阅读所有内容而感到羞耻。我看了邮件的开头,断定你想复制另一个网站。