Ошибка Python Selenium возникает в режиме безголового управления?Python

Программы на Python
Ответить
Anonymous
 Ошибка Python Selenium возникает в режиме безголового управления?

Сообщение Anonymous »

Я пытаюсь получить всю HTML-страницу форума этого сайта. Раздел комментариев можно загрузить только после прокрутки вниз. После некоторой прокрутки вы обнаружите, что в конечном итоге (на странице 4) появляется кнопка Загрузить следующую страницу, которую необходимо нажать, чтобы получить последующие комментарии. После долгих поисков приведенный ниже код работает достаточно хорошо, чтобы перейти на последнюю страницу комментариев. Большая часть этого взята из этого поста stackoverflow, а также из этого.

Для справки: я использую Windows 10, и моя версия драйвера Chrome — 76.0.3809.132. Я также использовал PhantomJS, чтобы посмотреть, какой из них будет загружаться быстрее. Оба файла драйвера .exe располагаются в том же каталоге, что и тот, из которого я запускаю сценарий. До сегодняшнего дня у меня не возникало никаких проблем.

Код: Выделить всё

import selenium.webdriver as webdriver
from selenium.webdriver.chrome.options import Options

def scrollDownAllTheWay(driver):
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
driver.execute_script("window.scrollTo(0, 100*document.body.scrollHeight);")

time.sleep(3)

if "Load next page" in driver.page_source:
driver.find_element_by_css_selector('.myButton').click()

new_height = driver.execute_script("return document.body.scrollHeight")

if new_height == last_height:
break
last_height = new_height

#Load this and comment out chrome headless code below, if needed.
#driver = webdriver.PhantomJS()

#Chrome driver
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)

driver.get("https://www.chessable.com/discussion/thread/58883/official-chessable-launch-schedule-2019/")

scrollDownAllTheWay(driver)
Когда я запускаю приведенный выше сценарий с помощью webdriver.PhantomJS() (заменяя им часть Chrome), у меня не возникает проблем. Функция выполняется до тех пор, пока безголовый браузер не достигнет последней страницы. Отлично.

Когда я запускаю приведенный ниже скрипт с помощью webdriver.Chrome() без заголовка, я сталкиваюсь со следующей ошибкой:

Код: Выделить всё

ElementClickInterceptedException: Message: element click intercepted: Element ... is not clickable at point (388, 23). Other element would receive the click: ...   (Session info: headless chrome=76.0.3809.132)
Я не смог найти ничего полезного для решения этой проблемы. Еще более странно то, что если вы отключите часть options.add_argument("--headless") (закомментируйте ее), страница загружается нормально и завершает прокрутку всей страницы. Я вижу, как последние клики выполняются в моем локальном браузере Chrome, а затем вижу, как он прекращает прокрутку и нажатие после завершения.

Вопрос: Почему Chrome без головы сессия здесь не работает должным образом, а версия без headless работает?

Изменить: Я только что нашел этот пост, который может потенциально может быть полезен, но я не уверен.

Примечание. Я готов использовать другие драйверы браузера, такие как FireFox() или что-нибудь еще, в качестве потенциального обходного пути, но вопрос все равно остается.

Подробнее здесь: https://stackoverflow.com/questions/577 ... less-state
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»