Я использую 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
Selenium WebDriverWait получает заголовок, но javascript меняет плитку после загрузки страницы ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
WebDriverWait.until больше не доступен в выпусках Selenium-java-3.2 и Selenium-java-3.3.
Anonymous » » в форуме JAVA - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
WebDriverWait.until больше не доступен в выпусках Selenium-java-3.2 и Selenium-java-3.3.
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-