ElementNotInteractableException:无法使用python和firefox Webdriver将元素滚动到Selenium中的视图中

问题描述 投票:0回答:1

由于ElementNotInteractableException而发生link.click()。我了解这是因为硒没有找到要滚动的内容,但是我该如何解决呢?

def collect_page(self, page):
    # navigate to page
    self.browser.get(
        'https://www.facebook.com/' + page + '/')

    # Scroll down depth-times and wait delay seconds to load
    # between scrolls
    for scroll in range(self.depth):

        # Scroll down to bottom
        self.browser.execute_script(
            "window.scrollTo(0, document.body.scrollHeight);")

        # Wait to load page
        time.sleep(self.delay)

    print("before open")
    # Once the full page is loaded, we can start scraping
    with open(self.dump, "a+", newline='', encoding="utf-8") as save_file:
        writer = csv.writer(save_file)
        links = self.browser.find_elements_by_link_text("See more")

        print("before for")
        for link in links:
            print("in for loop opening link")
            link.click()
            print("opening link")

        posts = self.browser.find_elements_by_class_name(
            "userContentWrapper")
        poster_names = self.browser.find_elements_by_xpath(
            "//a[@data-hovercard-referer]")

        print("before count")
        for count, post in enumerate(posts):
            # Creating first CSV row entry with the poster name (eg. "Donald Trump")
            analysis = [poster_names[count].text]

            # Creating a time entry.
            time_element = post.find_element_by_css_selector("abbr")
            utime = time_element.get_attribute("data-utime")
            analysis.append(utime)

            # Creating post text entry
            text = post.find_element_by_class_name("userContent").text
            status = self.strip(text)
            analysis.append(status)

            # Write row to csv
            print("writing")

            writer.writerow(analysis)
selenium selenium-webdriver selenium-firefoxdriver
1个回答
0
投票

尝试使用等待元素为clickable,以便元素将被正确加载并能够进行交互。

for link in links:
    print("in for loop opening link")
   WebDriverWait(self.browser, 30).until(EC.element_to_be_clickable((By.LINK_TEXT, 
   "See more")))
    link.click()
    print("opening link")
© www.soinside.com 2019 - 2024. All rights reserved.