Доброе утро!
Это дубликат аналогичного сообщения на StackOverflow, НА КОТОРЫЙ НЕТ ответа, который решил бы мою проблему.
В течение последних нескольких дней мой скрипт Python-Selenium, использующий Chrome Driver 104, имел проблемы при прокрутке вниз на бесконечной прокрутке динамически загружаемых страниц. Этот скрипт
используется для прокрутки Facebook и выполнения определенных действий RPA, таких как отправка сообщений и т. д. (я приложил только фрагмент, связанный с ошибкой).
Подводя итог, можно сказать, что пользователь вводит количество сообщений, которые нужно охватить, и скрипт достигнет этого конкретного количества сообщений, например, первых 1000 сообщений, и выполнит определенные действия (не нарушает Условия использования Facebook)
Это скрипт НЕ работает в экземпляре докера или любом другом контейнере, используя все ресурсы моего ПК. Кроме того, этот скрипт был протестирован на:
1- ПК с Windows 11, 16 ГБ оперативной памяти и процессором i7
2- MacBook — 16 ГБ
2- MacBook — 16 ГБ
p>
3 – Windows Server 2019 – 32 ГБ оперативной памяти, процесс i7
4 – Linux Ubuntu 22.0 Server — 16 ГБ оперативной памяти (увеличено значение Dev/shm до 30 ГБ на этом сервере)
5- Ядро Google Colab (увеличено dev/shm)
Все вышеперечисленное имело точно такую же ошибку с та же ошибка, удаление сеанса из-за сбоя страницы.
Когда скрипт достигает около 800-900 постов (хотя это случайное число, у меня когда-то он достигал 1,2 тыс. постов, а потом не получилось в следующий раз в 400?) страница станет очень медленной, а затем выйдет из строя. Теперь кое-что следует отметить: я МОГУ прокручивать НАМНОГО более 1500 сообщений обычно на своем компьютере (например, вручную), и это определенно НЕ дает сбой. Итак, я почти уверен, что это ошибка в моем сценарии, а не из-за проблем с памятью (возможно, утечка памяти в сценарии, но я имею в виду не аппаратную проблему). Когда сценарий прерывается, объем оперативной памяти на самом деле не превышает 80 % от общего объема оперативной памяти.
Если бы я запускал сценарий в небезголовом режиме, я получал сообщение об ошибке в Chrome, в котором говорилось:
"Ой, Snap, Chrome не хватает памяти"
Чтобы сэкономить ваше время , я прочитал следующие сообщения о потоке Stackover, и они не помогло:
1- неизвестная ошибка: сеанс удален из-за сбоя страницы из-за неизвестной ошибки: невозможно определить статус загрузки из Сбой вкладки с ChromeDriver Selenium
2- selenium.WebDriverException: неизвестная ошибка: сеанс удален из-за сбоя страницы из-за сбоя вкладки
3- Сеанс Python Selenium удалено из-за сбоя страницы из-за неизвестной ошибки: невозможно определить статус загрузки на вкладке сбой
4. Получение ошибки «org.openqa.selenium.WebDriverException: неизвестная ошибка: сеанс удален из-за сбоя страницы» при выполнении сценариев автоматизации (который использует Java, но все равно читает его)
5- Ошибка Selenium с простым методом driver.get(): сеанс удален из-за сбоя страницы из-за неизвестной ошибки: невозможно определить статус загрузки
Что Я сделал это, чтобы попытаться решить проблему (и это не сработало):
1- Размер окна изменен в соответствии с этим сообщением.
2- Использованы параметры Chrome --no-sandbox и - -disable-dev-shm-usage
3- Пробовал использовать --js-flags (--max_old_space_size=8096)
4- Все отключено уведомления, сообщения о геолокации, изображения
5- Убедился, что мой dev/shm на Mac и Linux достаточно велик, как и временная папка в Windows.
6- Добавлено МНОГО time.sleep() между прокрутками.
7. Пробовал использовать другой метод прокрутки (чтобы перейти в конец страницы с помощью javascript, «driver.execute_script()»
8- Использование Firefox GeckoDriver в качестве а также Edge и Opera.
9. Использование различных способов проверки количества сообщений на странице (Bs4, LXML), что, похоже, не является проблемой, поскольку проблема возникает в часть прокрутки.
Фрагмент, вызывающий проблему: (Параметры Chrome не указаны в коде, но я загружаю их из отдельного файла и запишу их после хотя код)
# Start Selenium Imports
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
# Selenium Imports Finished
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.action_chains import ActionChains
def login(email, password):
driver.get('https://www.facebook.com/')
#Email
driver.find_element(By.NAME,'email').send_keys(email)
#Password
driver.find_element(By.NAME,'pass').send_keys(password, Keys.RETURN)
time.sleep(2)
def reachPosts(noOfPosts = 50) -> None:
posts = driver.find_element(By.XPATH,"//div[@role='feed']").find_elements(By.CSS_SELECTOR, ".g4tp4svg.mfclru0v.om3e55n1.p8bdhjjv")
postsNo = len(posts)
posts = None
while postsNo < noOfPosts+1:
scroll_down()
posts = driver.find_element(By.XPATH,"//div[@role='feed']").find_elements(By.CSS_SELECTOR, ".g4tp4svg.mfclru0v.om3e55n1.p8bdhjjv")
time.sleep(1)
print(len(posts))
postsNo = len(posts)
if postsNo >= 1000:
time.sleep(10)
posts = None
posts = None
#----------------Scroll Function!-----------------------------#
def scroll_down():
"""A method for scrolling the page."""
# Scroll down to the bottom.
#driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
for i in range(3):
actions.send_keys(Keys.SPACE).perform()
#-----------------End-----------------------------------------#
def openGroup(facebookUrl, inputDate):
print("Opening Facebook Link")
driver.get(f'{facebookUrl}?sorting_setting=CHRONOLOGICAL')
time.sleep(2)
reachPosts(creds["Number of posts"])
posts = driver.find_element(By.XPATH,"//div[@role='feed']").find_elements(By.CSS_SELECTOR, ".g4tp4svg.mfclru0v.om3e55n1.p8bdhjjv")
noOfPosts = creds["Number of posts"]
def main():
global creds
creds = openCredentials()
login(creds["email"], creds["password"])
for group in creds['Facebook Groups']:
openGroup(group, creds["Date"])
time.sleep(3)
Использованные параметры Chrome:
"--disable-extensions",
"--disable-application-cache",
"--headless"
"window-size=600,450",
"--disable-blink-features=AutomationControlled",
"--enable-javascript",
"disable-infobars",
"--js-flags='--max_old_space_size=8196'",
"--max_old_space_size=4096",
"max_old_space_size=9000",
"--disable-dev-shm-usage",
"--incognito",
"--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
Ошибка
Traceback (most recent call last):
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\src\facebookScraperIndiv.py", line 313, in
main()
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\src\facebookScraperIndiv.py", line 302, in main
openGroup(group, creds["Date"])
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\src\facebookScraperIndiv.py", line 254, in openGroup
reachPosts(creds["Number of posts"])
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\src\facebookScraperIndiv.py", line 84, in reachPosts
scroll_down()
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\src\facebookScraperIndiv.py", line 104, in scroll_down
actions.send_keys(Keys.SPACE).perform()
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\lib\site-packages\selenium\webdriver\common\action_chains.py", line 78, in perform
self.w3c_actions.perform()
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\lib\site-packages\selenium\webdriver\common\actions\action_builder.py", line 88, in perform
self.driver.execute(Command.W3C_ACTIONS, enc)
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 434, in execute
self.error_handler.check_response(response)
File "D:\Work & Projects\Work\Upwork\Facebook Groups Scraper\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
(Session info: chrome=105.0.5195.102)
Stacktrace:
Backtrace:
Ordinal0 [0x0024DF13+2219795]
Ordinal0 [0x001E2841+1779777]
Ordinal0 [0x000F4100+803072]
Ordinal0 [0x000E6F18+749336]
Ordinal0 [0x000E5F94+745364]
Ordinal0 [0x000E6528+746792]
Ordinal0 [0x000EF42F+783407]
Ordinal0 [0x000FA938+829752]
Ordinal0 [0x0014F3CF+1176527]
Ordinal0 [0x0013E616+1107478]
Ordinal0 [0x00117F89+950153]
Ordinal0 [0x00118F56+954198]
GetHandleVerifier [0x00542CB2+3040210]
GetHandleVerifier [0x00532BB4+2974420]
GetHandleVerifier [0x002E6A0A+565546]
GetHandleVerifier [0x002E5680+560544]
Ordinal0 [0x001E9A5C+1808988]
Ordinal0 [0x001EE3A8+1827752]
Ordinal0 [0x001EE495+1827989]
Ordinal0 [0x001F80A4+1867940]
BaseThreadInitThunk [0x76236739+25]
RtlGetFullPathName_UEx [0x774D90AF+1215]
RtlGetFullPathName_UEx [0x774D907D+1165]
(No symbol) [0x00000000]
Подробнее здесь: https://stackoverflow.com/questions/736 ... -page-cras
Selenium.WebDriverException: неизвестная ошибка: сеанс удален из-за сбоя страницы из-за сбоя вкладки (не в докере) ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение