Selenium WebDriverWait получает заголовок, но javascript меняет плитку после загрузки страницыPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Selenium WebDriverWait получает заголовок, но javascript меняет плитку после загрузки страницы

Сообщение Anonymous »

Я использую Selenium для переименования и сортировки носителя в папке на основе заголовка страницы, но страница по-прежнему загружает контент в фоновом режиме, и заголовок страницы меняется после того, как Firefox завершил загрузку и отображение содержание.
Каждый раз, когда я нажимаю на эпизод документального сериала, который не является первым эпизодом в сериале, возникает эта проблема. Он возвращает название эпизода, а не название сериала, но после того, как фоновое содержимое завершило загрузку заголовка браузера и текста тега html, я после изменения названия сериала, чего я и хочу.< img alt="введите описание изображения здесь" src="https://i.sstatic.net/cwxz1cbg.png" />
Я искал в Google, а также искал здесь на stackoverflow.com в течение нескольких дней. Я просмотрел почти каждую часть модуля селена, пробуя разные вещи, плюс я просмотрел каждую часть веб-страницы в надежде найти что-то, что я могу использовать, чтобы заставить селен дождаться завершения загрузки контента, но безуспешно. .
Кроме того, в ответе на другой вопрос было рекомендовано использовать WebDriverWait с ожидаемыми_условиями и стараться избегать time.sleep с селеном , и я это понимаю. Даже при высокоскоростном подключении к Интернету существует ряд факторов, которые могут замедлить время загрузки веб-страницы, что может привести к нестабильности time.sleep.
Я начал с сам заголовок с использованием...
import selenium.webdriver.support.expected_conditions as ec
from selenium.webdriver.support.wait import WebDriverWait

browser = Firefox()
wait = WebDriverWait(driver = browser, timeout = 30)

browser.get('https://curiositystream.com/video/3558')
wait.until_not(ec.title_is(current_title))

Но на данный момент я с этим согласен. Проблема, с которой я сталкиваюсь, возникает не так часто, но проблема все еще существует.
print(wait.until(
ec.visibility_of_element_located((
'xpath',
'//button[@aria-expanded="false" and @class="inline-block cursor-pointer"]'
'/span[@class="leading-tight text-lg tablet:text-2xl font-normal" and contains(@aria-label,"Show")]'
))).text, end = ' ')

if len(browser.find_elements(
by = 'xpath',
value = '//div[@class="pt-4"]/p[@class="font-medium text-light pt-2"]'
)) > 0:
print('(Docuseries)')
else:
print('(Documentary)')


Это не настоящий источник того, что я написал, но он может воспроизвести мою проблему. Я надеюсь, что кто-нибудь захочет изучить Selenium и Curiosity Stream, чтобы помочь мне найти решение, которое работает без использования time.sleep.
from contextlib import suppress
from os import getpid, kill
from re import compile
from signal import SIGTERM
from time import sleep # noqa

import selenium.common.exceptions as exc
import selenium.webdriver.support.expected_conditions as ec
from selenium.webdriver import Firefox
from selenium.webdriver.support.wait import WebDriverWait

# from library import Firefox

if __name__ == '__main__':
browser = Firefox()
wait = WebDriverWait(driver = browser, timeout = 30)

browser.set_window_rect(x = 960, y = 10, width = 1920, height = 1580)
browser.get('https://curiositystream.com/')

url = compile(r'https://curiositystream.com/video/[0-9]+')

# current_url = current_title = ''
current_url, current_title = browser.current_url, browser.title
try:
while True:
if current_url != browser.current_url:
current_url = browser.current_url

wait.until_not(ec.title_is(current_title))

if url.match(string = browser.current_url):
current_title = browser.title

if (button := next((_ for _ in browser.find_elements(
by = 'xpath',
value = '//button[@class="vjs-big-play-button" and '
'@type="button" and '
'@title="Play Video" and '
'@aria-disabled="false"]'
)), None)) is not None:
with suppress(
exc.StaleElementReferenceException,
exc.ElementNotInteractableException
):
button.click()

# sleep(wait.__dict__['_poll'])
print(wait.until(
ec.visibility_of_element_located((
'xpath',
'//button[@aria-expanded="false" and @class="inline-block cursor-pointer"]'
'/span[@class="leading-tight text-lg tablet:text-2xl font-normal" and contains(@aria-label,"Show")]'
))).text, end = ' ')

if len(browser.find_elements(
by = 'xpath',
value = '//div[@class="pt-4"]/p[@class="font-medium text-light pt-2"]'
)):
print('(Docuseries)')
else:
print('(Documentary)')
except exc.NoSuchWindowException:
kill(getpid(), SIGTERM)



Подробнее здесь: https://stackoverflow.com/questions/787 ... g-the-tile
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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