В настоящее время я работаю над простым скребком страниц с использованием Selenium. Она прокручивает страницу определенное количество раз, чтобы загрузить ее, а затем перемещается по каждому сообщению, чтобы проанализировать там информацию.
Я пытаюсь сделать скриншот каждого поста.
Я использую ActionChain, чтобы перейти к элементу, сделать паузу, а затем сделать скриншот всего окна браузера.
Насколько я понимаю, move_to_element должен перемещать курсор в центр элемента.
По какой-то причине моя программа делает два скриншота одного и того же поста, а затем пропускает каждый второй пост, поскольку функция скриншотов является частью цикла, проходящего через посты. В зависимости от элемента, который находится в фокусе, иногда случайно включается следующий пост, но иногда он вообще не отображается в окне браузера.
Мой вывод csv содержит все сообщения, включая те, которые не включены в скриншоты, поэтому я знаю, что они не просто пропускаются полностью.
Первоначально я пытался сделать снимок экрана непосредственно с самого элемента, но это работает очень плохо при бесконечной прокрутке (поскольку страница перезагружается каждый раз, когда выделяется элемент post).
Я также пытался изменить момент, когда ActionChain прокручивает элемент, чтобы сделать снимок экрана, и я даже пытался просто делать снимок экрана каждый раз, когда веб-драйвер прокручивает страницу вниз. Тем не менее, ни один из них не сработал для меня должным образом, так как я все еще скучаю по некоторым постам.
def collect_posts(self, page):
self.load_page() # scrolls to the bottom of the page
post_num = 0
with open("test.csv", "a+", newline='', encoding="utf-8") as save_file:
writer = csv.writer(save_file)
posts = self.browser.find_elements_by_class_name(
"userContentWrapper")
for post in posts:
post_num += 1
self.get_screenshot(post, post_num)
analysis = self.parse_post(post, page_name)
# Write row to csv
writer.writerow(analysis)
def get_screenshot(self, post, post_num):
# Set up action chain for moving to elements to take screenshots
action = ActionChains(self.browser).move_to_element(post)
action = action.pause(self.delay).perform()
filename = self.dump[:-4] # name the subdirectory after the filename
os.makedirs(f"Screenshots\\{filename}", exist_ok=True)
# Take a screenshot
screenshot = self.browser.save_screenshot(
f'{self.path}\\Screenshots\\{filename}\\test-{post_num}.png')
if not screenshot:
print("Something is wrong, could not save screenshot")
Подкаталог успешно создан, и в конце программы существует такое же количество снимков экрана, что и общее количество собранных сообщений. Однако каждый пост с четным номером является дубликатом предыдущего поста, и в файле CSV нет скриншота поста с таким номером.
Большое спасибо за любую помощь или предложения, которые вы можете мне дать!